1. 程式人生 > >java中多型的理解,instanceof關鍵字,向上向下轉型的理解

java中多型的理解,instanceof關鍵字,向上向下轉型的理解

一、多型的定義

比如:人可以是學生,也可以是老師,也可以是軍人。這就表現了人的多種形態性。多型就是多種形態。

多型的最終體現為:父類的引用變數可以指向子類物件。

多型的前提是必須有子父類關係,或者類實現介面關係,否則無法完成多型。

在使用多型後,父類的引用變數呼叫方法時,會呼叫子類重寫後的方法。

二、多型使用格式

多型的格式就是父類的引用變數指向子類物件。

此外:抽象類,介面都可以實現多型的形式。

三、多型的成員變數和方法。

這個很重要!

不管怎麼樣,父類必須有。但是變數執行的是父類的,方法執行的是子類的。

即:編譯看父類,執行看子類。

四、關鍵字instanceof  

instanceof 關鍵字,用於引用型別的比較判斷。有關係的判斷。即:判斷是不是給定的引用型別。

注意instanceof  只能對有繼承關係的類,有實現關係的類的判斷。其他關係類的判斷是不行的。

五、多型中的向上轉型

java中型別的轉換包含自動型別轉換和強制型別轉換。多型的向上轉型就屬於自動型別轉換。多型向下轉型就是強制型別轉變

除了引用型別的向上轉型,還有引用型別的向下轉型。如圖

六、提出一個問題

1、為什麼要進行向上向下轉型。

向上轉型表示:將子類的物件賦值給父類的引用物件。如果不向上轉型,子類重寫了自己的方法,子類只能呼叫自己重寫的父類方法。

注意:向上轉型後只能呼叫父類子類共有的方法,子類擴充套件的方法無法呼叫。父類的所有方法都被子類繼承。即使子類沒有重寫,子類就是有。如果要呼叫子類自己的方法需要向下轉型。

那麼為什麼不直接建立一個子類物件呢?

其實問題的關鍵在於,子類重寫了父類的方法,向上轉型讓父類引用變數可以呼叫子類重寫父類的方法。但不能呼叫子類重寫的方法。如果要呼叫子類重寫的方法,向下轉型。向上轉型還提升了擴充套件性,即:不需要建立子類例項

 

七、面向物件三大特徵

1、封裝:提高了安全性。

2、繼承: 程式擴充套件性

3、多型:減少程式碼重複,提升擴充套件。沒有方法重寫,就沒有多型。

八、小知識

匿名物件:

下面括號裡可以寫m,或者用匿名物件直接寫new Mouse()。

在實際應用中,把方法的引數設定為介面,非常好。