函數由函數的定義(返回值類型、函數名和參數列表)和函數體構成。
抽象函數:只有函數的定義,沒有函數體,使用abstract關鍵字來定義。如
abstract void fun();
錯誤原因:在一個類當中擁有一個或多個抽象函數時,那這個類必須定義為抽象類。
什么是抽象類?
使用abstract定義的類叫做抽象類(基類)。
[1] 不能調用抽象類的構造函數從而生成抽象類的對象。
[2] 一個類當中包含抽象函數,那么這個類必須是抽象類。
[3] 一個類當中沒有抽象函數,那么這個類也可以是抽象類。
抽象類的作用:用于被繼承,抽象類的子類可以生成對象
當子類繼承了作為父類的抽象類后,由于抽象類的抽象函數也可以被繼承,根據第[2]條需要把子類定義為抽象類,但這樣還是不能生成對象,除此之外,可通過復寫抽象函數來增加函數體,這樣就可以生成對象了。
abstract class Person{ Person(){ System.out.class Chinese extends Person{ Chinese(){ System.out.println("Chinese的構造函數"); } void eat(){ //復寫 System.out.println("用筷子吃飯"); }}class Test{ public static void main(String args[]){ Person p = new Chinese();//向上轉型 p.eat(); }}
抽象類可以擁有構造函數嗎??
雖然不能用new來調用抽象類的構造函數,但是抽象類的子類可以通過super來調用抽象類的構造函數,所以結論是可以的。
為什么要使用抽象類?
如果把父類定義為抽象類,把要由子類來實現功能的函數定義為抽象函數,如果忘記復寫就會產生語法錯誤。強制要求子類在繼承父類時對這個抽象函數進行復寫來減少錯誤。
新聞熱點
疑難解答