尚硅谷JavaSE基礎(chǔ)

7.6 抽象類(lèi)

7.6.1 抽象類(lèi)概念

1.抽象類(lèi)(abstract class)

隨著繼承層次中一個(gè)個(gè)新子類(lèi)的定義,類(lèi)變得越來(lái)越具體,而父類(lèi)則更一般,更通用。類(lèi)的設(shè)計(jì)應(yīng)該保證父類(lèi)和子類(lèi)能夠共享特征。有時(shí)將一個(gè)父類(lèi)設(shè)計(jì)得非常抽象,以至于它沒(méi)有具體的實(shí)例,這樣的類(lèi)就可以聲明為抽象類(lèi)。

2. 抽象類(lèi)和具體類(lèi)

抽象類(lèi)與具體類(lèi)

?????? 具體類(lèi) — 對(duì)現(xiàn)實(shí)世界一種實(shí)體的抽象定義。

?????? 抽象類(lèi) — 對(duì)現(xiàn)實(shí)世界一種類(lèi)型的多種實(shí)體的統(tǒng)一抽象定義。

例如:

?????? Pet類(lèi)應(yīng)定義為抽象類(lèi)

?????? Bird類(lèi)應(yīng)定義為具體類(lèi)

?????? 抽象類(lèi)中可聲明抽象方法

?????? 示例:

?????? public abstract class Pet {

??????????? public abstract void speak();

??????????? ……

? ??}

7.6.2特點(diǎn)

①用abstract關(guān)鍵字來(lái)修飾一個(gè)類(lèi)時(shí),這個(gè)類(lèi)叫做抽象類(lèi);

②用abstract來(lái)修飾一個(gè)方法時(shí),該方法叫做抽象方法。

抽象方法:只有方法的聲明,沒(méi)有方法的實(shí)現(xiàn)。以分號(hào)結(jié)束:abstract int abstractMethod( int a );

含有抽象方法的類(lèi)必須被聲明為抽象類(lèi)。

 

抽象類(lèi)不能被實(shí)例化。抽象類(lèi)是用來(lái)被繼承的,抽象類(lèi)的子類(lèi)必須重寫(xiě)父類(lèi)的抽象方法,并提供方法體。若沒(méi)有重寫(xiě)全部的抽象方法,仍為抽象類(lèi)。

不能用abstract修飾屬性、私有方法、構(gòu)造器、靜態(tài)方法、final的方法。