天天看點

阿花寶寶 Java基礎筆記 之 多态區分

 多态

 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.