Java學習第二十天
阿新 • • 發佈:2021-07-26
一、今天干了什麼
多型強化學習:
物件的多型性:父類的引用指向子類的物件
Person p = new Man(); //Man為Person的子類
1.當呼叫子類和父類同名同參數的方法時,實際執行的是子類重寫父類的方法(虛擬方法呼叫)
注意:不能呼叫子類特有的方法、屬性。
有了物件的多型性之後,記憶體中實際上是載入了子類特有的屬性和方法的,但是由於變數宣告為父類型別,導致編譯時只能呼叫父類中的屬性和方法。子類特有的屬性和方法不能呼叫。
2.如何呼叫子類特有的屬性和方法?
Man m1 = (Man) p; //向下轉型:使用強制型別轉換符
注意:使用強制型別轉換的時候可能會報錯:ClassCastException。為了避免,引入了instanceof關鍵字
3.instanceof關鍵字
a instanceof A:判斷物件a是不是A的例項。如果是,返回true;如果不是,返回false。返回false就不能向下轉型了
如果a instanceof A返回true,則a instanceof B也返回true,其中B為A的父類
4.使用向下轉型時的常見問題(以下幾種都不行):
(1)編譯時通過,執行時不通過:
Person p = new Person();
Man m = (Man) p;
(2)編譯通過,執行也通過:
Object obj = new Man();
Person p = (Person) obj;
(3)編譯不通過(注意右邊必須是左邊的子類或者是同類型):
Man m = new Woman();
String str = new Date();
二、明天干什麼
瞭解Object類及其使用、equals()的使用和重寫