1. 程式人生 > 其它 >Java學習第二十天

Java學習第二十天

一、今天干了什麼

多型強化學習:

物件的多型性:父類的引用指向子類的物件

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()的使用和重寫