一:繼承條件下的構造方法呼叫
程式**:
class程式截圖:grandparent
public grandparent(string string
)
}class
parent extends grandparent
}class
child extends parent
}public
class
testinherits
}
結論:(1)通過
super
呼叫基類構造方法,必須是子類構造方法中的第乙個語句。
(2)當我們去執行**的時候,父類的建構函式會先於子類的建構函式。然後,在當我們把子類中的父類的構造方法取消注釋,我們會發現同樣的結果,然後當我們把父類的構造方法放入子類的構造方法之後,我們會發現,**無法編譯通過,由此得到結論。
二:怎樣判斷物件是否可以轉換?
可以使用instanceof運算子判斷乙個物件是否可以轉換為指定的型別:
object obj="hello";
if(obj instanceof string)
system.out.println("obj物件可以被轉換為字串
");程式**:
public程式截圖:class
testinstanceof
}
三:「型別轉換」
程式**:
package結論:子類物件可以直接賦給基類變數。test;
class
mammal{}
class dog extends
mammal {}
class cat extends
mammal{}
public
class
testcast
}
基類物件要賦給子類物件變數,必須執行型別轉換,
其語法是: 子類物件變數=(子類名)基類物件名;
四:子類父類擁有同名的方法時
當子類與父類擁有一樣的方法,並且讓乙個父類變數引用乙個子類物件時,到底呼叫哪個方法,由物件自己的「真實」型別所決定,這就是說:物件是子型別的,它就呼叫子型別的方法,是父型別的,它就呼叫父型別的方法。 這個特性實際上就是物件導向「多型」特性的具體表現。
程式**:
public程式截圖:class
parentchildtest
}class
parent
}class child extends
parent
}
結論1:當子類與父類擁有一樣的方法,並且讓乙個父類變數引用乙個子類物件時,到底呼叫哪個方法,由物件自己的「真實」型別所決定,這就是說:物件是子型別的,它就呼叫子型別的方法,是父型別的,它就呼叫父型別的方法。
結論2:如果子類與父類有相同的字段,則子類中的字段會代替或隱藏父類的字段,子類方法中訪問的是子類中的字段(而不是父類中的字段)。如果子類方法確實想訪問父類中被隱藏的同名字段,可以用super關鍵字來訪問它。
動手動腦(繼承與多型)
1.為什麼子類的構造方法在執行之前,必須呼叫父類的構造方法?能不能反過來?為什麼不能反過來?構造方法主要用來建立物件時初始化物件,即為物件變數賦初始值。建立乙個物件,先呼叫構造方法來進行初始化,子類擁有父類的成員變數和方法,如果不調父類的構造方法,則從父類繼承而來的成員變數和方法得不到正確的初始化。...
繼承與多型 動手動腦
1.和測試結果如下 2.我的猜想 parent.printvalue myvalue 100 child.printvalue myvalue 200 parent.printvalue myvalue 101 child.printvalue myvalue 200 child.printvalu...
06 繼承與多型 動手動腦
1.怎樣判斷物件是否可以轉換?可以使用instanceof運算子判斷乙個物件是否可以轉換為指定的型別。例 1 public class testinstanceof 220 程式執行結果 2.現有三個類 class mammal class dog extends mammal class cat ...