java基礎學習——abstract抽象類

先附上一張虔誠的圖!

然後我們開始學習!

abstract是抽象類的關鍵字,是最重要的一個修飾符,可以修飾類和方法。分別叫做抽象方法和抽象類。人們在認識事物的時候,會把具有相同特徵和行為的事物歸為一個抽象類。比如動物就是一個很抽象的概念。當得到動物的實例時,總是某個具體物種的實例。所以說,在需要某個抽象類的實例時,只能夠用某個具體類的實例來代替。抽象類不能實例化,不能生成抽象類的對象,但能定義一個引用。

abstract修飾類:

會使這個類成為一個抽象類,這個類將不能生成對象實例,但可以做為對象變數聲明的類型,也就是編譯時類型。

抽象類就相當於一個類的半成品,需要子類繼承並覆蓋其中的抽象方法,這時子類才又創建實例的能力,如果子類沒有實現父類的抽象方法,那麼子類也要為抽象類。

Advertisements

abstract修飾方法:

會使這個方法變成抽象方法,也就是只有聲明而沒有實現,實現部分以「;」代替,需要子類繼承實現。

抽象方法代表了某種標準,定義標準,定義功能,在子類中去實現功能(子類繼承了父類並需要給出從父類繼承的抽象方法的實現)。

方法一時間想不到怎麼被實現,或有意要子類去實現而定義某種標準,這個方法可以被定義為抽象。

注意:

有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。

當一個非抽象類繼承自某個抽象類時,必須實現所繼承抽象類的所有抽象方法,即抽象類的第一個非抽象子類必須要實現其父類所有的抽象方法。其中也包括了父類繼承的抽象方法。

一個類中只要包含有抽象方法,那麼這個類就必須被定義成抽象類,反之,即使一個類不包含任何抽象方法,這個類仍然可以被定義成抽象類。

Advertisements

abstract和final不能同時使用,這兩個關鍵字有著相反的含義。abstract修飾方法和類,就是想讓別人重寫或者是繼承的,而final是組織重寫和繼承的。private和abstract也不能同時修飾方法。因為private組織繼承,也就阻止了重寫實現,與abstract的意義相違背。

實例:

package javaBig;

/**

* 抽象類:abstract

* @author LENOVO

*抽象類可以沒有抽象方法,有抽象方法的類必須是抽象類

*非抽象類繼承抽象類必須實現所有的抽象方法

*抽象類可以沒有方法實現和屬性

*抽象類不能被實例化

*抽象類不能聲明為final

*/

/**

* 介面:interface 介面是一組行為的規範、定義

* @author LENOVO

*

*/

public class javaAbstract {

public static void main(String[] args) {

// TODO 自動生成的方法存根

//Person p = new Person();//抽象方法不能被實例化

Man m = new Man();

m.eat();

Women n = new Women();

n.eat();

}

}

//具體類繼承抽象類必須要實現抽象方法

class Man extends Person{

//實現抽象類的方法

public void eat() {

System.out.println("我是男人,我大口大口的吃飯");

}

}

class Women extends Person{

public void eat() {

System.out.println("我是女人,我吃飯細嚼慢咽");

}

}

abstract class Person{

private String name;

public void setName() {

this.name = name;

}

public String getName(String name) {

return name;

}

public abstract void eat();//沒有實現,抽象方法

}

Advertisements

你可能會喜歡