更新時(shí)間:2020-05-27 16:14:52 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2445次
使用了關(guān)鍵字abstract聲明的類叫作“抽象類”。如果一個(gè)類里包含了一個(gè)或多個(gè)抽象方法,類就必須指定成abstract(抽象)。“抽象方法”,屬于一種不完整的方法,只含有一個(gè)聲明,沒有方法主體。特征:
示例:設(shè)計(jì)一個(gè)門類,因?yàn)槭瞧胀ㄩT和指紋門開門的方式是不同的:普通門用鑰匙;指紋門可以輸入指紋、可以按密碼或者用鑰匙。但是,二者關(guān)門的方式都一樣(把門一堆就可以關(guān)上了)。這里就符合抽象類的設(shè)計(jì)思路,把開門設(shè)計(jì)成抽象方法,具體方法內(nèi)容交給子類去實(shí)現(xiàn);而把關(guān)門設(shè)計(jì)成普通方法,子類復(fù)用該方法就好。
代碼實(shí)現(xiàn)如下:
public?abstract?class?Door{
public?abstract?void?open();
public?void?close(){
System.out.println("關(guān)門!");
}
}
public?class?CommonDoor?extends?Door?{
@Override
public?void?open()?{
System.out.println("普通門用鑰匙開門。");
}
}
public?class?FingerprintDoor?extends?Door?{
@Override
public?void?open()?{
System.out.println("指紋門用鑰匙、指紋、密碼都可以開門。");
}
}
Java中的接口是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類實(shí)現(xiàn),而這些實(shí)現(xiàn)可以具有不同的行為(功能)。接口通過關(guān)鍵字interface來定義,類使用接口通過關(guān)鍵字implements來實(shí)現(xiàn)。例如:public class A implements B
特征:
示例:
還是門這個(gè)類,除了普通門和指紋門,還有警報(bào)門,它除了具有開門關(guān)門的方法外,還可以實(shí)現(xiàn)告警功能,而告警功能并不具備門的普遍性,因此合理的做法是把告警設(shè)計(jì)成一個(gè)接口,當(dāng)有些門具備告警功能時(shí)就去實(shí)現(xiàn)告警接口。
代碼實(shí)現(xiàn)如下:
public?interface?Alarm{
public?void?alarm();
}
public?class?AlarmDoor?extends?Door?implements?Alarm?{
@Override
public?void?alarm()?{
//?TODO?Auto-generated?method?stub
System.out.println("警報(bào)門有告警功能。");
}
@Override
public?void?open()?{
System.out.println("警報(bào)門用鑰匙、指紋、密碼都可以開門。");
}
}
在一個(gè)面向?qū)ο蟮南到y(tǒng)中,系統(tǒng)的各種功能是由許許多多的不同對象協(xié)作完成的。在這種情況下,各個(gè)對象內(nèi)部是如何實(shí)現(xiàn)自己的,對系統(tǒng)設(shè)計(jì)人員來講就不那么重要了;而各個(gè)對象之間的協(xié)作關(guān)系則成為系統(tǒng)設(shè)計(jì)的關(guān)鍵。小到不同類之間的通信,大到各模塊之間的交互,在系統(tǒng)設(shè)計(jì)之初都是要著重考慮的,這也是系統(tǒng)設(shè)計(jì)的主要工作內(nèi)容。面向接口編程就是指按照這種思想來編程。“面向接口編程”中的“接口”可以說是一種從軟件架構(gòu)的角度、從一個(gè)更抽象的層面上指那種用于隱藏具體底層類和實(shí)現(xiàn)多態(tài)性的結(jié)構(gòu)部件。這里的接口是一種思想層面的用于實(shí)現(xiàn)多態(tài)性、提高軟件靈活性和可維護(hù)性的架構(gòu)部件,而具體語言中的“接口”是將這種思想中的部件具體實(shí)施到代碼里的手段。接口從更深層次的理解,應(yīng)是定義(規(guī)范,約束)與實(shí)現(xiàn)(名實(shí)分離的原則)的分離。接口的本身反映了系統(tǒng)設(shè)計(jì)人員對系統(tǒng)的抽象理解。
1.接口是公開的,里面不能有私有的方法或變量,是用于讓別人使用的,而抽象類是可以有私有方法或私有變量的。
2.實(shí)現(xiàn)接口的一定要實(shí)現(xiàn)接口里定義的所有方法,而實(shí)現(xiàn)抽象類可以有選擇地重寫需要用到的方法,一般的應(yīng)用里,最頂級(jí)的是接口,然后是抽象類實(shí)現(xiàn)接口,最后才到具體類實(shí)現(xiàn)。
3.接口可以實(shí)現(xiàn)多重繼承,而一個(gè)類只能繼承一個(gè)超類,但可以通過繼承多個(gè)接口實(shí)現(xiàn)多重繼承。
4.接口還有標(biāo)識(shí)(里面沒有任何方法,如Remote接口)和數(shù)據(jù)共享(里面的變量全是常量)的作用。
選擇接口還是抽象類
1.如果要?jiǎng)?chuàng)建不帶任何方法定義和成員變量的基類,那么就應(yīng)該選擇接口而不是抽象類。
2.如果知道某個(gè)類應(yīng)該是基類,那么第一個(gè)選擇的應(yīng)該是讓它成為一個(gè)接口,只有在必須要有方法定義和成員變量的時(shí)候,才應(yīng)該選擇抽象類。因?yàn)槌橄箢愔性试S存在一個(gè)或多個(gè)被具體實(shí)現(xiàn)的方法,只要方法沒有被全部實(shí)現(xiàn)該類就仍是抽象類。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“詳細(xì)了解Java抽象類與接口”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743