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();//沒有實現,抽象方法
}