抽象類
使用了關鍵字abstract聲明的類叫作“抽象類”。如果一個類里包含了一個或多個抽象方法,類就必須指定成abstract(抽象)。“抽象方法”,屬于一種不完整的方法,只含有一個聲明,沒有方法主體。特征:
- 抽象類是不完整的(可以理解為類中的方法并沒有完全實現),并且它只能用作基類。
- 抽象類不能直接實例化,并且對抽象類使用new運算符是編譯時錯誤。
- 在繼承抽象類時,必須覆蓋該類中的每一個抽象方法
示例:設計一個門類,因為是普通門和指紋門開門的方式是不同的:普通門用鑰匙;指紋門可以輸入指紋、可以按密碼或者用鑰匙。但是,二者關門的方式都一樣(把門一堆就可以關上了)。這里就符合抽象類的設計思路,把開門設計成抽象方法,具體方法內容交給子類去實現;而把關門設計成普通方法,子類復用該方法就好。
代碼實現如下:
public?abstract?class?Door{ public?abstract?void?open(); public?void?close(){ System.out.println("關門!"); }}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中的接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。接口通過關鍵字interface來定義,類使用接口通過關鍵字implements來實現。例如:public class A implements B
特征:
- 一個類可以實現多個接口,接口彌補了類的不能多繼承缺點。
- Java接口本身沒有任何實現,只描述行為,所以Java接口比Java抽象類更抽象化。
- 接口不是類,不能使用new來實例化一個接口。
- 接口中的方法可以有參數列表和返回類型,但不能有任何方法體。
- 接口中可以包含字段,但是會被隱式的聲明為static和final。
- 接口中的字段只是被存儲在該接口的靜態(tài)存儲區(qū)域內,而不屬于該接口。
- 接口中的方法可以被聲明為public或不聲明,但結果都會按照public類型處理。
- 實現一個接口時,需要將被定義的方法聲明為public類型,否則為默認訪問類型,Java編譯器不允許這種情況。
- 如果沒有實現接口中所有方法,那么創(chuàng)建的仍然是一個接口。
- 擴展一個接口來生成新的接口應使用關鍵字extends,實現一個接口使用implements。
示例:
還是門這個類,除了普通門和指紋門,還有警報門,它除了具有開門關門的方法外,還可以實現告警功能,而告警功能并不具備門的普遍性,因此合理的做法是把告警設計成一個接口,當有些門具備告警功能時就去實現告警接口。
代碼實現如下:
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("警報門有告警功能。"); } @Override public?void?open()?{ System.out.println("警報門用鑰匙、指紋、密碼都可以開門。"); }}
面向接口編程的理解
在一個面向對象的系統中,系統的各種功能是由許許多多的不同對象協作完成的。在這種情況下,各個對象內部是如何實現自己的,對系統設計人員來講就不那么重要了;而各個對象之間的協作關系則成為系統設計的關鍵。小到不同類之間的通信,大到各模塊之間的交互,在系統設計之初都是要著重考慮的,這也是系統設計的主要工作內容。面向接口編程就是指按照這種思想來編程。“面向接口編程”中的“接口”可以說是一種從軟件架構的角度、從一個更抽象的層面上指那種用于隱藏具體底層類和實現多態(tài)性的結構部件。這里的接口是一種思想層面的用于實現多態(tài)性、提高軟件靈活性和可維護性的架構部件,而具體語言中的“接口”是將這種思想中的部件具體實施到代碼里的手段。接口從更深層次的理解,應是定義(規(guī)范,約束)與實現(名實分離的原則)的分離。接口的本身反映了系統設計人員對系統的抽象理解。
接口和抽象類的區(qū)別
1.接口是公開的,里面不能有私有的方法或變量,是用于讓別人使用的,而抽象類是可以有私有方法或私有變量的。
2.實現接口的一定要實現接口里定義的所有方法,而實現抽象類可以有選擇地重寫需要用到的方法,一般的應用里,最頂級的是接口,然后是抽象類實現接口,最后才到具體類實現。
3.接口可以實現多重繼承,而一個類只能繼承一個超類,但可以通過繼承多個接口實現多重繼承。
4.接口還有標識(里面沒有任何方法,如Remote接口)和數據共享(里面的變量全是常量)的作用。
選擇接口還是抽象類
1.如果要創(chuàng)建不帶任何方法定義和成員變量的基類,那么就應該選擇接口而不是抽象類。
2.如果知道某個類應該是基類,那么第一個選擇的應該是讓它成為一個接口,只有在必須要有方法定義和成員變量的時候,才應該選擇抽象類。因為抽象類中允許存在一個或多個被具體實現的方法,只要方法沒有被全部實現該類就仍是抽象類。
以上就是長沙達內教育java培訓機構的小編針對“詳細了解Java抽象類與接口”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。