8、Java——面向物件:多型,引用資料型別:轉型,抽象的,介面
(1)一種事物的多種形態|多種表現形式,行為的多型,一個行為的不同的實現方式。
(2)多型的前提:類的繼承|介面的實現。
(3)多型的最終體現:父類的引用指向子類的物件。
(4)多型呼叫:會呼叫子類中重寫的方法。
(5)多型的實現效果:配合方法的重寫,當父類引用指向不同的子類物件,同一個方法具有不同的實現方式-->行為多型。
(6)多型呼叫成員的特點:
父類引用呼叫。
成員變數:編譯執行看父類|左邊|型別。
成員方法:編譯看父類|左邊|型別。
執行找子類|右邊|物件。
(7)注意: ①多型是行為的多型。
②多型如果不配合方法的重寫沒有意義。
③父類引用對子類新增內容不可見。
④如果多型想要有意義,需要配合方法的重寫,多型才有意義。
(8)做題四大原則:
①繼承鏈:自己沒有找父。
A
|
B
/ \
C D
②編譯看型別、確定方法,執行找物件。
③就近最優原則。
④父類引用對子類新增方法不可見,編譯期間能夠確定所呼叫的方法。
(2)向上轉型 : 自動型別提升。
Person p = new Student(); --> 多型。
(3)多型呼叫: 對子類新增內容不可見。
(4)向下轉型 : 強制型別轉換。
Student s = (Student)p;
通過s引用呼叫Student型別所有的內容。
(5)ClassCastException 型別轉換異常,引用強轉型別的時候,沒有轉為指向的子類物件型別,轉為了其他子類型別,出現的異常。
(6)預防出出現型別轉換異常->instanceof 運算子。
(7)引用 instanceof 型別:判斷前面的引用是否指向後面型別的物件或者後面型別子類的物件,是->true 不是->false。
3、抽象的
(2)抽象方法: ①被abstract修飾的方法。
②沒有方法體。
③存在與抽象類中。
(3)開發部門:
Develop 開發部 work()
java攻城獅 work(){"伺服器端開發"}
web程式猿 work(){"客戶端開發"}
(4)抽象類的特點:
①抽象類不能例項化。
②抽象類可以定義任意內容(屬性,功能(抽象的方法,具體的方法))。
③抽象方法必須要求被重寫。
④抽象類使用: 通過具體子類物件使用。
具體子類: 重寫所有的抽象方法 + 按需新增。
抽象子類: 按需重寫抽象方法 + 按需新增。
⑤一個抽象方法一旦被重寫,可以不再被重寫,根據需求決定。
⑥abstract不能與private,final,static,native 一起使用。
⑦抽象類可以實現多型。
(1)介面可以理解為是一個特殊的抽象類
(2)功能的集合,引用資料型別,介面可以幫助定義規範,解耦-->降低耦合度,類是單繼承,介面多實現的
(3)定義 :interface 定義介面
(4)組成:
①jdk7及之前:
公共的靜態的常量
public static final--> 修飾符可以任意省略
公共的抽象的方法
public abstract --> 修飾符可以任意省略
②jdk8中新增:
1.靜態方法 : 可以定義方法體
使用: 通過介面名使用
2.預設方法 : 可以定義方法體
顯示的被default修飾
使用: 通過實現類物件使用
③jdk8及之後:
使用:
a.介面不能例項化
b.介面需要通過實現類的物件使用
c.父類需要通過子類繼承 extends -->父類中的成員,子類繼承父類有權可以直接使用,介面需要通過實現類去實現 implements --> 因為介面中幾乎都是抽象方法沒有方法體,需要實現類自己實現方法體,所有叫做實現,介面的實現與類的繼承很像,都擁有了父類的成員使用權,或者擁有介面中定義的功能,但是一個側重點在拿過來就用,一個側重點在拿過來要實現才能用
d. 介面的使用:
具體的實現類 : 重寫所有的衝向方法 + 按需新增
抽象的實現類 : 按需重寫 + 按需新增
e.介面可以多實現,類只能單繼承
f.如果一個類同時繼承父類實現介面,要求先繼承後實現
(5)注意:
①.父類與介面無法完全相互代替,如果可以建議使用介面,因為介面可以多實現非常靈活
②類與類之間只能繼承
類與介面之間,只能是類實現介面
類與類之間只能單繼承
類與介面之間可以多實現
介面與介面之間,可以多繼承
③介面可以實現多型 介面引用指向實現類物件