多态
Pet p = new Dog();
前邊是父類類型 後面是子類類型;
都是p.mm();
1、如果父類有 子類有
那麼調用 子類的
2、如果父類有 子類沒有
那麼調用 父類的
3、如果父類沒有 子類有
那麼 報錯!!!!
一 。 多态
父類類型 父類引用 = new 子類類型();
多态 三要素:
1 、 要有繼承關系 extends
2 、 要有方法重寫
第一種情況子類沒有重寫父類同名方法時,子類對象調用的是父類的方法
第二種情況 父類沒有此方法,無法使用父類對象去調用(編譯不能通過)
編譯時: 看寫的對象是什麼類型 就通路什麼類型
運作時: 會根據傳進來的真實類型來調用相應方法
JVM動态綁定機制:根據運作時的真實類型去調用相應的方法
3 、 要有父類引用指向子類對象
二 、 抽象方法
1 、 抽象方法沒有具體實作 通路修飾符 abstract 傳回類型 方法名()
2 、 抽象方法所在的類必須是抽象類
通路修飾符 abstract class() 類名
3 、 子類必須實作抽象服了的抽象方法 除非子類也是抽象的
4 、 抽象類中可以有抽象方法 也可以沒有
5 、 抽象類不可以被執行個體化
三 向下轉型和向下轉型
向下轉型:
(子類類型)子類引用 = (子類類型)父類引用
向下轉型後才能調用子類特有的方法
當要轉換類型與父類引用指向的子類類型不一緻時候 報錯。。。。。。。
解決辦法
使用 instanceof 關鍵字判斷類型
四 、父類類型作為方法的傳回值
通路修飾符 父類類型 方法命(參數){
return 具體子類對象;
}
測試類 :
1. 詢問: 要列印什麼呀? (電視類還是視訊)
2. 根據詢問的結果 傳回一個具體的子類對象
3.