標籤:擴充性 多態 .class 抽象類別 類型 提高 public 抽象方法 而且
* Java語言的繼承是單一繼承,一個子類只能有一個父類(一個兒子只能有一個親爹)
* Java語言給我們提供了一種機制,用於處理繼承單一的局限性的,介面
*
* 介面:介面是一個比抽象類別還抽象的類,介面裡所有的方法全是抽象方法,介面和類的關係是實現,implements
* interface
*
* 格式:
* interface 介面名 {
*
* }
* 介面的成員特點:
* 只能有抽象方法
* 只能有常量
* 預設使用public&abstract修飾方法
* 只能使用public&abstract修飾方法
* 預設使用public static final來修飾成員變數
*
* 建議:建議大家手動的給上預設修飾符
*
* 注意:
* 介面不能建立對象(不能執行個體化)
* 類與介面的關係是實現關係,一個類實現一個介面必須實現它所有的方法
* 類與類:繼承關係,單一繼承,多層繼承
* 類與介面:實現關係,多實現
* 介面與介面的關係:繼承關係,多繼承
定義介面所在的仍為.java檔案,雖然聲明時使用的為interface關鍵字的編譯後仍然會產生.class檔案。這點可以讓我們將介面看做是一種只包含了功能聲明的特殊類。
介面中的方法全是抽象方法,直接new介面來調用方法沒有意義,Java也不允許這樣幹
類與介面的關係為實現關係,即類實現介面。實現的動作類似繼承,只是關鍵字不同,實現使用implements
其他類(實作類別)實現介面後,就相當於聲明:”我應該具備這個介面中的功能”。實作類別仍然需要重寫方法以實現具體的功能。
格式:
class 類 implements 介面 {
重寫介面中方法
}
1、介面中可以定義變數,但是變數必須有固定的修飾符修飾,public static final 所以介面中的變數也稱之為常量,其值不能改變。後面我們會講解fnal關鍵字
2、介面中可以定義方法,方法也有固定的修飾符,public abstract
3、介面不可以建立對象。
4、子類必須覆蓋掉介面中所有的抽象方法後,子類才可以執行個體化。否則子類是一個抽象類別。
介面和
抽象類別的
區別
1.共性:
不斷的進行抽取,抽取出抽象的,沒有具體實現的方法,都不能執行個體化(不能建立對象)
2.區別1: 與類的關係
(1)類與介面是實現關係,而且是多實現,一個類可以實現多個介面,類與抽象類別是繼承關係,Java中的繼承是單一繼承,多層繼承,一個類只能繼承一個父類,但是可以有爺爺類
(2)區別2: 成員
a.成員變數
抽象類別可以有成員變數,也可以有常量
介面只能有常量,預設修飾符public static final
b.成員方法
抽象類別可以有抽象方法,也可以有非抽象方法
介面只能有抽象方法,預設修飾符 public abstract
c.構造方法
抽象類別有構造方法,為子類提供
介面沒有構造方法
* 多態的前提:
* 子父類的繼承關係
* 方法的重寫
* 父類引用指向子類對象
*
* 動態綁定:運行期間調用的方法,是根據其具體的類型
* 多態的成員特點:
* 成員變數 編譯時間看的是左邊,運行時看的左邊
* 成員方法 編譯時間看的是左邊,運行時看右邊
* 靜態方法 編譯時間看的是左邊,運行時看的也是左邊.因為使用變數去調用靜態方法,其實相當於用變數類型的類名去調用
*
*
* 編譯時間看的都是左邊,運行時成員方法看的是右邊,其他(成員變數和靜態方法)看的都是左邊
* 多態的優缺點
* 優點:可以提高可維護性(多態前提所保證的),提高代碼的可擴充性
缺點:無法直接存取子類特有的成員
* final: 修飾符,可以用於修飾類、成員方法和成員變數
* final所修飾的類:不能被繼承,不能有子類
* final所修飾的方法:不能被重寫
* final所修飾的變數:是不可以修改的,是常量
*
* 常量:
* 字面值常量:1,2,3
* 自訂常量:被final所修飾的成員變數,一旦初始化則不可改變
*
* 注意:自訂常量必須初始化,可以選擇顯示初始化或者構造初始化
物件導向-介面與多態