1. 程式人生 > >課堂(繼承與多態)動手動腦

課堂(繼承與多態)動手動腦

類構造 註意 調用父類 變量賦值 出錯 指定 and 技術 eof

01.怎樣判斷對象是否可以轉換?

答:可以使用instanceof運算符判斷一個對象是否可以轉換為指定的類型

02. 現在有三個類:

class Mammal{}

class Dog extends Mammal {}

class Cat extends Mammal{}

針對每個類定義三個變量並進行初始化

Mammal m=null ;

Dog d=new Dog();

Cat c=new Cat();

下列語句哪一個將引起編譯錯誤?為什麽?哪一個會引起運行時錯誤?為什麽?

m=d;

d=m;

d=(Dog)m;

d=c;

c=(Cat)m;

出現編譯錯誤:第二行,原因:不能將父類變量賦值給子類變量。

第四行,原因:繼承於同一個父類的兩個平行子類不能互相賦值。

出現運行錯誤:第五行,原因:在第一行中,m變量已經指向Dog對象,如果再執行c = (Cat)m,就是讓c指向Dog對象,而Cat和Dog之間不存在繼承關系,無法讓c指向Dog對象。

03.

運行 TestInherits.java 示例,觀察輸出,註意總結父類與子類之間構造方法的調用關系修改Parent構造方法的代碼,顯式調用GrandParent的另一個構造函數,註意這句調用代碼是否是第一句,影響重大!

技術分享

通過 super 調用基類構造方法,必須是子類構造方法中的第一個語句。

04.

運行以下測試代碼

技術分享

. 左邊的程序運行結果是什麽?

2. 你如何解釋會得到這樣的輸出?

3. 計算機是不會出錯的,之所以得

到這樣的運行結果也是有原因的,

那麽從這些運行結果中,你能總

結出Java的哪些語法特性?

答:

技術分享

當子類與父類擁有一樣的方法,並且讓一個父類變量引用一個子類對象時,到底調用哪個方法,由對象自己的“真實”類型所決定,這就是說:對象是子類型的,它就調用子類型的方法,是父類型的,它就調用父類型的方法。

如果子類與父類有相同的字段,則子類中的字段會代替或隱藏父類的字段,子類方法中訪問的是子類中的字段(而不是父類中的字段)。如果子類方法確實想訪問父類中被隱藏的同名字段,可以用super關鍵字來訪問它。

如果子類被當作父類使用,則通過子類訪問的字段是父類的!

課堂(繼承與多態)動手動腦