多型

不比真如一相会發表於2024-03-18

1.多型

1.1多型的前提

1.有繼承 / 實現關係 2.有方法重寫 3.有父類引用指向子類物件

2.2成員訪問的特點

2.2.1成員變數

編譯的時候看父類,執行的時候也看父類

1.2.2成員方法

編譯看父類,執行看子類

父類中可能有抽象方法沒有方法體,所以統一執行子類的方法

1.2.3靜態成員、靜態方法

編譯看父類,執行看子類

在編譯的時候即使是用的子類去呼叫也會因為編譯器的編譯將子類轉化為父類

1.3多型的好處和弊端

1.3.1好處

提高了程式碼的擴充套件性

具體體現 :

  1. 將方法的形參定義為父類型別, 這個方法就可以接收任意子類物件了

  2. 業務體現 :

A: 支付介面 -> 1. 支付平臺 2. 銀行卡支付 3 信用卡支付

B: 訂單業務介面 -> 國內業務實現類 國外業務實現類

1.3.2弊端

不能直接呼叫子類特有的變數和方法

問題: 非要呼叫怎麼辦 ?

  1. 直接建立子類物件

  2. 向下轉型

1.4多型的含義

1.4.1物件多型

將方法的形參定義為父類型別, 這個方法可以接收該父類的任意子類物件

1.4.2行為多型

同一個行為, 具有多個不同表現形式或形態的能力

1.5多型的轉型問題

1.5.1向上轉型

從子到父(父類引用指向子類物件)

Fu f = new Zi();

1.5.2向下轉型

從子到父(父類引用指向子類物件)

Zi z = (Zi)f;

1.5.3關鍵字instanceof

物件名 instanceof 型別

判斷一個物件是否是一個類的例項

通俗的理解:判斷關鍵字左邊的物件,是否是右邊的型別,返回boolean型別結果