一、介面
1,概述
介面是特殊的抽象類,所有的屬性都是公開靜態常量(全域性常量),所有的方法都是公開抽象方法而且沒有構造方法。
2,(思想)特點
介面是對外暴露的規則
介面是程式的功能擴充套件
介面的出現降低耦合性
介面可以用來多實現
類與介面之間是實現關係,而且類可以繼承乙個類的同時實現多個介面。介面與介面之間可以有繼承關係。
3,介面的使用
類實現介面的時候,要麼全部實現介面中的方法,要麼類本身定義為抽象類。介面不能被例項化,所有成員有固定修飾符。
注意:
a 如果介面預設的方法是public和abstract,可以省略不寫,但是在類實現介面時,不可省略public
b 如果介面的返回值不是void,那麼類實現該介面時,方法必須要有return語句
c 如果介面的返回值是void,大括號內可以沒有語句
d 如果父類實現了某乙個介面,子類也自然實現了該介面
4,介面和抽象類的區別
a 抽象類可以單繼承,介面可以多實現
b 抽象類中可以由非抽象方法。介面中的方法都是抽象的,介面中只能有靜態常量
c 抽象類定義的是乙個體系的共性功能,介面中通常定義的是物件中的擴充套件功能
d 介面的出現避免了單繼承的侷限性
e 抽象類被繼承體現 is a 的關係,介面被實現體現 like a 的關係。
二、多型
1,概述
事物的多種形態,它分為靜態多型(過載)和動態多型(物件的多型)
2,特點
體現:多型用在方法的引數上m(a a)可以用a的任何乙個子類物件作為引數
多型用在方法的返回值上a m()m方法的返回值可能是a的子類物件
父類引用或者介面引用執行子類的物件。
前提:
a、類與類之間有繼承關係
b、必須有重寫
c、父類引用指向子類物件
多型的成員特點:
a、成員變數 編譯看左邊,執行也看左邊
編譯--參考的是引用型別變數所屬的類中是否有呼叫的成員變數,如果有,編譯通過,沒有則失敗
執行--呼叫的也是引用型別中所屬類的成員變數
b、成員方法--依賴於物件 編譯看左邊、執行看右邊
c、靜態方法--不依賴於物件 編譯執行都看左邊
3、好處
提高**的擴充套件性,便於後期可維護性。把不同的子類物件都看作是父類的物件,遮蔽了子類的差異,使得程式更加通用。
4、弊端
只能使用子類中和父類的同名方法。對於子類特有的方法使用不了。
5、思想
多型可以指揮同種型別的一批物件做事情,複雜問題簡單化
帶士兵打仗、下課吃飯
6、向上轉型、向下轉型
對程式進行擴充套件,或者限定對物件的方法操作時,使用向上轉型。當要使用子類的特有方法時,需要向下轉型(要做健壯性判斷)。
animal a = new dog(); 向上轉型:把dog提公升為animal
a.eat(); 向下轉型: 呼叫的是dog的方法
多型的例題參考:
三、instanceof關鍵字
它是乙個比較運算子,返回值型別用boolean。
對引用作強制型別轉換,可以用instanceof判斷是否相容,從而避免型別轉換異常。
if(a instanceof dog)
Java多型 抽象 介面
b 多型前提 c 案例演示 class demo class animal class cat extends animal 成員方法 靜態方法 多型的弊端 什麼時候用多型呢 b 抽象類特點 抽象方法 抽象類不一定有抽象方法 但有抽象方法的類一定是抽象類 抽象類不能例項化 那麼抽象類如何例項化呢 抽...
Java介面 繼承 多型
介面是為了解決多繼承問題 修飾符 inte ce 介面名 extends 父介面名列表 注意 修飾符可預設,父介面名列表可省略,但是一旦寫了extends就不能省略 與類相同介面檔名與介面相同 介面可以繼承 介面名稱前面有大寫l 實現介面 修飾符 class 類名 extends 父類名 imple...
Java 介面和多型
介面 乙個比抽象類還抽象的類,介面中所有的方法都是抽象方法 介面的成員特點 1.只能有抽象方法 2.只能有常量 沒有乙個方法體,無法對變數進行初始化 3.預設使用public和abstract修飾方法 4.只能使用public和abstract修飾方法 5.預設使用public,static,fin...