2018-12-15
Day07 介面、多型、模板設計模式例項
1.介面
1.1介面的定義
介面就是是Java語言中一種引用型別,是方法的集合。
如果說類的內部封裝了成員變數、構造方法和成員方法,那麼 介面的內部主要就是封裝了方法,包含抽象方法(JDK 7及以前),預設方法和靜態方法(JDK 8),私有方法 (JDK 9)。

介面的定義,它與定義類方式相似,但是使用 interface 關鍵字。它也會被編譯成.class檔案,但一定要明確它並 不是類,而是另外一種引用資料型別。
1.2介面的注意要點:
1.介面中的方法定義不需要Abstract 來修飾,預設就是抽象的
2.介面是不可以例項化的,需要有類來實現介面的語法:
class +類名+implements +介面名,介面名,........{
// 分別實現每一個介面的方法}, 繼承了介面的預設方法,即可以直接呼叫,也可以重寫。

4.在類中可以定義屬性,可以通過介面的實現類的例項來訪問,還可以通過介面名來訪問。

5.介面中的屬性不能被修改,我們介面的屬性預設都是final static的,通常在介面中來定義屬性把他作為常量,常量的名字規範是字母大寫,而且多個單詞之間用下劃線來分隔。eg: FILE_PATH


6.介面可以繼承介面,可以實現多級繼承,多繼承,多實現
要求是jdk1.7以後

注意:
1.介面中, 有多個預設方法 時,實現類都可繼承使用。如果預設方法有重名的, 必須重寫一次 。
2.當一個類,既繼承一個父類,又 實現若干個介面 時,父類中的成員方法與介面中的預設方法重名,子類 就近(離子類名最近)選擇執行父類 的成員方法。
1.3介面的應用
1.介面定義是一種標準,可以使我們的程式碼分層開發,分模組開發。
2.降低程式碼的耦合性,提高程式碼的可擴充套件性和可維護性。
3.介面改變了單繼承的侷限。
4.介面可以實現多繼承,而類不可以實現多繼承。
5.處理的介面方法相同時會合二為一。
6.介面的多繼承:(介面繼承介面使用關鍵字extends),如果父介面中的預設方法有重名的,那麼子介面需要重寫一次。
注意: 1.子介面重寫預設方法時,default關鍵字可以保留。
2.子類重寫預設方法時,default關鍵字不可以保留。
1.4介面和抽象類的區別詳解:
1.介面的所有方法都是抽象的,抽象類裡面的抽象方法可以是抽象的也可以是非抽象的。
2.介面和抽象類都不能例項化,而介面需要類來實現後例項化實現類,抽象類需要類來繼承然後實現例項化子類。
3.抽象類只能單繼承,介面可以單繼承,也可以多繼承多級繼承,介面還可以多實現(jdk1.7以上)。
4.介面中的屬性是static final 型別的,抽象類中的屬性跟普通類中的屬性沒有什麼區別。
5.介面中的方法預設就是抽象的,不需要加abstract,抽象類中的抽象方法需要加Abstract關鍵字。
2.1多型的概念
是指同一行為,具有多個不同表現形式。
從繼承的角度理解:父類的引用,子類的實現
Fu fu=new Zi();
實際開發的過程中,父類型別作為方法形式引數,傳遞子類物件給方法,進行方法的呼叫,更能體現出多型的擴充套件性與便利。
2.2繼承多型
1.必須有繼承關係,在抽象類中可以定義多型的抽象方法,通過子類來繼承這個抽象類然後複寫抽象類中的抽象方法以達到多型的效果。

2.3多型子類的例項可以賦給父類的引用
子類的例項用父類的型別來接收
語法 :父類名+變數=new + 子類名
變數 . 父類屬性=“。。。”;//呼叫父類的屬性,子類的特有的方法不能通過父類來呼叫

2.4 父類的例項用子類的型別來接收
需要用到轉型,強制轉換
語法 :子類名+變數=(子類名)new +父類名

為了避免ClassCastException的發生,Java提供了 instanceof 關鍵字,給引用變數做型別的效驗。
變數名 instanceof 資料型別
如果變數屬於該資料型別,返回true。 如果變數不屬於該資料型別,返回false。
3.模板設計模式
第一種角色:抽象模板
定義三種方法:第一個抽象方法需要子類去實現,子類必須實現第二次擴充套件方法,是一個空方法,子類可以去複寫也可以不復寫。第三個私有的最終方法,是不可以複寫的。第四個模板方法定義了每一個方法的執行順序和邏輯。
第二種角色:具體模板要繼承抽象模板
需要實現抽象模板中的抽象方法,才可以擴充套件抽象模板中的抽象方法。


