1.抽象類
- 由來:利用抽象類為了更好的對類進(jìn)行分類。如同不同的具體植物有不同的名字,但都可以統(tǒng)稱為植物,“植物”這個抽象的詞對所有具體植物進(jìn)行了歸納。
java用來模擬現(xiàn)實世界,所有也存在抽象類。 - 抽象類通常用來作為一個類族的若干頂層類,用最底層的類表示現(xiàn)實中具體的事物,用最頂層的類表示該類族事物所具有的共性。
- 抽象類除了不能實例化對象之外,類的其它功能依然存在,成員變量、成員方法和構(gòu)造方法的訪問方式和普通類一樣。
- 由于抽象類不能實例化對象,所以抽象類必須被繼承,才能被使用。
- 在Java中抽象類表示的是一種繼承關(guān)系,一個類只能繼承一個抽象類,而一個類卻可以實現(xiàn)多個接口。
2.抽象方法
- 定義方法時,只有方法頭,沒有方法體,這樣的方法稱為抽象方法。
- 凡是沒有方法體的方法都必須用abstract關(guān)鍵字聲明為抽象方法。
- 含有抽象方法的類都必須聲明為抽象類。
- 抽象類不一定有抽象方法,有抽象方法一定是抽象類。
- 子類如果沒有把抽象類的所有抽象方法具體實現(xiàn),則子類也必須聲明為抽象類。
abstract class A //抽象類
{
abstract void f(); //抽象方法
}
abstract class B extends A
{
}
public class Test
{
public static void main(String[] args)
{
}
}
3.抽象類的使用
- 不能實例化抽象類,但可以定義一個抽象類的引用。
A a1 = new A();//error,不能生成抽象類的對象
A a1; //OK, a1只是A的一個引用 - 把一個子類對象的地址賦給抽象類的引用,然后通過抽象類的引用調(diào)用子類從父類繼承過來的方法,即抽象類也可以實現(xiàn)多態(tài)。
假設(shè)A是抽象類,B是A的子類且實現(xiàn)了A中的所有抽象方法
A a1 = new B();