繼承與多型動手動腦總結

2022-09-02 05:45:12 字數 1823 閱讀 4847

一:繼承條件下的構造方法呼叫

程式**:

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 ...