一、抽象類(abstract class) 隨著繼承層次中一個(gè)個(gè)新子類的定義,類變得越來越具體,而父類則更一般,更通用。類的設(shè)計(jì)應(yīng)該保證父類和子類能夠共享特征。有時(shí)將一個(gè)父類設(shè)計(jì)得非常抽象,以至于它沒有具體的實(shí)例,這樣的類叫做抽象類。
當(dāng)多個(gè)類中出現(xiàn)相同功能,但是功能主體不同,這時(shí)可以進(jìn)行向上抽取。有時(shí)只抽取功能定義,而不抽取功能主體。
另一種抽取:
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關(guān)鍵字來修飾一個(gè)類時(shí),這個(gè)類叫做抽象類; 2、用abstract來修飾一個(gè)方法時(shí),該方法叫做抽象方法。 抽象方法:只有方法的聲明,沒有方法的實(shí)現(xiàn)。以分號(hào)結(jié)束:
權(quán)限修飾符 abstract 返回值類型 方法名(參數(shù)列表);3、含有抽象方法的類必須被聲明為抽象類。 4、抽象類不能被實(shí)例化。抽象類是用來被繼承的,抽象類的子類必須重寫父類的抽象方法,并提供方法體。若沒有重寫全部的抽象方法,仍為抽象類。 5、不能用abstract修飾屬性、私有方法、構(gòu)造器、靜態(tài)方法、final的方法。
三、抽象類的應(yīng)用 抽象類是用來模型化那些父類無法確定全部實(shí)現(xiàn),而是由其子類提供具體實(shí)現(xiàn)的對(duì)象的類。 在航運(yùn)公司系統(tǒng)中,Vehicle類需要定義兩個(gè)方法分別計(jì)算運(yùn)輸工具的燃料效率和行駛距離。
問題:卡車(Truck)和駁船(RiverBarge)的燃料效率和行駛距離的計(jì)算方法完全不同。Vehicle類不能提供計(jì)算方法,但子類可以。 解決方案 java允許類設(shè)計(jì)者指定:超類聲明一個(gè)方法但不提供實(shí)現(xiàn),該方法的實(shí)現(xiàn)由子類提供。這樣的方法稱為抽象方法。有一個(gè)或更多抽象方法的類稱為抽象類。 Vehicle設(shè)計(jì)為一個(gè)抽象類,有兩個(gè)抽象方法。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注