abstract修飾符、介面interface
三. abstract修飾符
可用來修飾類和成員方法。
. 用abstract修飾的類表示抽象類,抽象類不能例項化,即不允許建立抽象類
本身的例項。沒有用abstract修飾的類稱為具體類,具體類可以被例項化。
. 用abstract修飾的方法表示抽象方法,抽象方法沒有方法體。抽象方法用來
描述系統具有什麼功能,但不提供具體的實現。
沒有abstract修飾的方法稱為具體方法,具體方法具有方法體。
語法規則;
1) 抽象類中可以沒有抽象方法,但包含了抽象方法的類必須被定義為抽象類;
2) 沒有抽象構造方法,也沒有抽象靜態方法;
3) 抽象類中可以有非抽象的構造方法;
4) 抽象類及抽象方法不能被final修飾符修飾。
抽象類不允許例項化:思考原因?
練習 AbstractTest.java
四. 介面
介面使用的目的:解決多重繼承問題;例如Fish類繼承Animal類,表明Fish是一種動物,
但魚同樣也是一種食物,如何表示這種關係呢? 由於Java語言不支援一個類有多個直接的父類,
因此無法用繼承關係來描述魚既是一種食物,又是一種動物,為了解決這一問題,
Java語言引入介面型別,簡稱介面。一個類只能有一個直接的父類,但是可以實現多個介面。
採用這種方式,Java語言對多繼承提供了有力的支援。
1. 介面是抽象類的另外一種形式
抽象類抽象到極致就是介面,抽象類可存在有方法體的方法,介面中的方法全部為抽象方法;
2. 介面中的所有方法均是抽象方法, 預設都是public、abstract型別的;
public interface A {
void method1(); //合法,預設為public、abstract型別
public abstract void method2();//合法,顯示宣告為public、abstract型別
3. 介面中的成員變數預設都是public, static, final型別,必須被顯式初始化;
public interface A {
int CONST = 1; //合法,CONST預設為public, static, final型別
public static final int OPAQUE = 1; //合法,顯示宣告為public static final 型別
}
4. 介面中只能包含public, static, final型別成員變數和public、abstract型別的成員方法;
5. 介面中沒有構造方法,不能被例項化。
6. 一個類只能繼承一個直接的父類,但能實現多個介面。
抽象類和介面比較:
1. 相同點:
a. 都不能被例項化;
b. 都能包含抽象方法;
2. 不同點;
a. 抽象類中可以為部分方法提供預設的實現,從而避免子類中重複實現它們,
提高程式碼的可重用性,而介面中只能包含抽象方法;
b. 一個類只能繼承一個直接的父類,這個父類有可能是抽象類;
但一個類可以實現多個介面,這是介面的優勢所在。