更新時(shí)間:2021年08月31日17時(shí)18分 來(lái)源:傳智教育 瀏覽次數(shù):
當(dāng)定義一個(gè)類(lèi)時(shí),常常需要定義一些成員方法描述類(lèi)的行為特征,但有時(shí)這些方法的實(shí)現(xiàn)方式是無(wú)法確定的。例如,在定義Animal類(lèi)時(shí),shout( )方法用于描述動(dòng)物的叫聲,但是不同動(dòng)物的叫聲是不同的,因此在shout( )方法中無(wú)法準(zhǔn)確地描述動(dòng)物的叫聲。
針對(duì)上面描述的情況,Java提供了抽象方法來(lái)滿足這種需求。抽象方法是使用abstract關(guān)鍵字修飾的成員方法,抽象方法在定義時(shí)不需要實(shí)現(xiàn)方法體。抽象方法的定義格式如下:
abstract void方法名稱(chēng) (參數(shù));
當(dāng)一個(gè)類(lèi)包含了抽象方法,該類(lèi)必須是抽象類(lèi)。抽象類(lèi)和抽象方法一樣,必須使用abstract關(guān)鍵字進(jìn)行修飾。
抽象類(lèi)的定義格式如下:
abstract class 抽象類(lèi)名稱(chēng){ 訪問(wèn)權(quán)限返回值類(lèi)型 方法名稱(chēng)(參數(shù)){ return [返回值] ; 訪問(wèn)權(quán)限abstract返回值類(lèi)型抽象方法名稱(chēng)(參數(shù)) ; //抽象方法,無(wú)方法體 }
從以上格式可以發(fā)現(xiàn),抽象類(lèi)的定義比普通類(lèi)多了一些抽象方法,其他地方與普通類(lèi)的組成基本上相同。
抽象類(lèi)的定義規(guī)則如下。
(1)包含一個(gè)以上抽象方法的類(lèi)必須是抽象類(lèi)。
(2)抽象類(lèi)和抽象方法都要使用abstract關(guān)鍵字聲明。
(3)抽象方法只需聲明而不需要實(shí)現(xiàn)。
(4)如果一個(gè)類(lèi)繼承了抽象類(lèi),那么該子類(lèi)必須實(shí)現(xiàn)抽象類(lèi)中的全部抽象方法。
下面通過(guò)一個(gè)案例學(xué)習(xí)抽象類(lèi)的使用,如文件4-10所示。
文件4-10 Example10.java
//定義抽象類(lèi)Animal abstract class Animal( //定義抽象方法shout () abstract void shout () ; } //定義Dog類(lèi)繼承抽象類(lèi)Animal class Dog extends Animal { //實(shí)現(xiàn)抽象方法shout () void shout () System.out.println ("汪汪..... ; } } //定義測(cè)試類(lèi) public class Example10 { public static void main (String[] args) { Dog dog=new Dog(); //創(chuàng)建Dog類(lèi)的實(shí)例對(duì)象 dog. shout() ; // 調(diào)用dog對(duì)象的shout ()方法 } }
在文件4-10中,第2~5行代碼是聲明了一個(gè)抽象類(lèi)
Animal,并在Animal類(lèi)中聲明了個(gè)抽象方法 shout ( );第9~11行代碼在子類(lèi)Dog中實(shí)現(xiàn)父類(lèi)Anima的抽象方法shout( );第17行代碼通過(guò)子類(lèi)的實(shí)例化對(duì)象調(diào)用shout( )方法。
注意:
使用abstract關(guān)鍵字修飾的抽象方法不能使用private修飾,因?yàn)槌橄蠓椒ū仨毐蛔宇?lèi)實(shí)現(xiàn),如果使用了private聲明,則子類(lèi)無(wú)法實(shí)現(xiàn)該方法。
接口和抽象類(lèi)有什么區(qū)別?【java面試題】
Java培訓(xùn)之java難點(diǎn)解析(七)-抽象類(lèi)
北京校區(qū)