標籤:java;抽象類別與介面;介面;抽象類別;抽象方法
介面的子類必須實現介面的全部方法嗎?
介面的子類必須實現介面中全部的方法嗎?答案:不是。原因如下:
如果子類是非抽象類別,則必須實現介面中的所有方法;
如果子類是抽象類別,則可以不實現介面中的所有方法,因為抽象類別中允許有抽象方法的存在!
1、抽象類別定義
抽象類別往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。通常在編程語句中用 abstract 修飾的類是抽象類別。在C++中,含有純虛擬函數的類稱為抽象類別,它不能產生對象;在java中,含有抽象方法的類稱為抽象類別,同樣不能產生對象。抽象類別是 不完整的,它只能用作基類。在物件導向方法中,抽象類別主要用來進行類型隱藏和充當全域變數的角色。
2、抽象類別特點
1)抽象類別不能執行個體化。
2)抽象類別可以包含抽象方法和抽象訪問器。
3)不能用 sealed 修飾符修飾抽象類別,因為這兩個修飾符的含義是相反的。 採用 sealed 修飾符的類無法繼承,而 abstract 修飾符要求對類進行繼承。
4)從抽象類別派生的非抽象類別必須包括繼承的所有抽象方法和抽象訪問器的實際實現。
3、與具體類的比較
1)抽象類別不能直接執行個體化,並且對抽象類別使用 new 運算子會導致編譯時間錯誤。雖然一些變數和值在編譯時間的類型可以是抽象的,但是這樣的變數和值必須或者為 null,或者含有對非抽象類別的執行個體的引用(此非抽象類別是從抽象類別派生的)。
2)允許(但不要求)抽象類別包含抽象成員。
3)抽象類別不能被密封。
4、抽象類別與介面的比較
1)相同點
a、不能執行個體化;
b、包含未實現的方法聲明;
c、衍生類別必須實現未實現的方法,抽象類別是抽象方法,介面則是所有成員(不僅是方法包括其他成員)
2)不同點
a、類可以實現無限個介面,但僅能從一個抽象(或任何其他類型)類繼承,從抽象類別派生的類仍可實現介面,從而得出介面是用來解決多重繼承問題的。
b、抽象類別當中可以存在非抽象的方法,可介面不能,且它裡面的方法只是一個聲明必須用public來修飾沒有具體實現的方法。
c、抽象類別中的成員變數可以被不同的修飾符來修飾,可介面中的成員變數預設的都是靜態常量(static final)。
d、抽象類別是對象的抽象,然而介面是一種行為規範。
結論:綜上結果,由於子類類型的不同,對介面的實現要求也是不一樣的。
本文出自 “In the eyes of the sun” 部落格,請務必保留此出處http://wang963825.blog.51cto.com/8695943/1883308
Java學習之介面的子類必須實現介面的全部方法嗎?