abstract class和interface是Java語言中對于抽象類定義進行支持的兩種機制,正是由于這兩種機制的存在,才賦予了Java強大的面向對象能力。abstract class和interface之間在對于抽象類定義的支持方面具有很大的相似性,甚至可以相互替換,因此很多開發者在進行抽象類定義時對于abstract class和interface的選擇顯得比較隨意。其實,兩者之間還是有很大的區別的,對于它們的選擇甚至反映出對于問題領域本質的理解、對于設計意圖的理解是否正確、合理。本文將對它們之間的區別進行一番剖析,試圖給開發者提供一個在二者之間進行選擇的依據。下面西安達內培訓(www.xatarena.cn)就為大家整理了Java抽象類與接口的區別,希望對想要參加達內西安java培訓的小伙伴們有所幫助。
抽象類:用abstract修飾的類稱為抽象類。
它可以有構造器,但是不能構造對象,抽象類中的構造器,在構造具體子類對象時調用,抽象方法決定抽象類,抽象類中可以沒有抽象方法,具體父類型可以作為引用類型的聲明;抽象父類型也可以作為引用類型的聲明;如果一個具體子類繼承抽象類,那么就要實現抽象父類中的所有抽象方法;在子類中重寫父類方法時,訪問級別要大于等于原有訪問級別;
接口:是一種統一的標準,是一個特殊的"模版"
接口中只能有:1、常量2、抽象方法;在定義方法時,具體類可以做形參,抽象類可以作形參,接口可以做形參;無論誰做形參,實參一定是具體類對象!(具體父類的具體子類;抽象類的具體子類;接口的具體實現類;)類可以在繼承一個父類的基礎上,實現多個接口;
抽象類與接口的異同:
相同處:1、不能構造對象2、都可以定義抽象方法3、設計的目的是為了被繼承或被實現4、與子類或實現類的關系都屬于is-a,可以用抽象類或接口的引用來作類型聲明,進而統一調用具體子類或具體實現類; |
|