一、抽象類(abstract class) 隨著繼承層次中一個個新子類的定義,類變得越來越具體,而父類則更一般,更通用。類的設計應該保證父類和子類能夠共享特征。有時將一個父類設計得非常抽象,以至于它沒有具體的實例,這樣的類叫做抽象類。 當多個類中出現相同功能,但是功能主體不同,這時可以進行向上抽取。有時只抽取功能定義,而不抽取功能主體。
另一種抽取:
abstract class Person{ public abstract void speak();}class Chinese extends Person{ public void speak(){ System.out.println("中文"); }}class American extends Person{ public void speak(){ System.out.println("英文"); }}class Japanese extends Person{ public void speak(){ System.out.println("日文"); }}二、語法 1、用abstract關鍵字來修飾一個類時,這個類叫做抽象類; 2、用abstract來修飾一個方法時,該方法叫做抽象方法。 抽象方法:只有方法的聲明,沒有方法的實現。以分號結束:
權限修飾符 abstract 返回值類型 方法名(參數列表);3、含有抽象方法的類必須被聲明為抽象類。 4、抽象類不能被實例化。抽象類是用來被繼承的,抽象類的子類必須重寫父類的抽象方法,并提供方法體。若沒有重寫全部的抽象方法,仍為抽象類。 5、不能用abstract修飾屬性、私有方法、構造器、靜態方法、final的方法。
三、抽象類的應用 抽象類是用來模型化那些父類無法確定全部實現,而是由其子類提供具體實現的對象的類。 在航運公司系統中,Vehicle類需要定義兩個方法分別計算運輸工具的燃料效率和行駛距離。 問題:卡車(Truck)和駁船(RiverBarge)的燃料效率和行駛距離的計算方法完全不同。Vehicle類不能提供計算方法,但子類可以。 解決方案 java允許類設計者指定:超類聲明一個方法但不提供實現,該方法的實現由子類提供。這樣的方法稱為抽象方法。有一個或更多抽象方法的類稱為抽象類。 Vehicle設計為一個抽象類,有兩個抽象方法。
新聞熱點
疑難解答