向上造型和方法的重寫

2021-09-12 11:46:17 字數 767 閱讀 4457

classa}

class

bextendsa}

a a =

newb()

;//向上造型

例:

//這串**最後輸出內容是?

class

aoo}

class

boo extend aoo

}class

coovoid

test

(boo o)

}class

doo}

輸出內容是:

testaoo

aoo超類

boo派生類

分析:coo.test(o)是乙個首先會從coo指向的物件裡尋找test方法,

coo是個coo型別的物件,這個物件裡有兩個test方法,他們的引數型別不同

根據coo.test(o)裡的o的型別選擇要執行哪乙個,o的型別是aoo,所以執行第乙個

會先列印testaoo,然後執行o.print()

同理,o只是乙個位址,要執行print需要先找到它指向的物件位址

通過aoo o = new boo()知道o指向的是乙個boo型別的物件

所以會呼叫boo裡的print方法,boo是aoo的派生類,重寫了print,在它的print方法裡先呼叫了超類的print,所以會先列印aoo超類,再列印boo派生類

這裡coo裡的兩個test簽名不同,是過載。aoo和boo的print發生在父子類中,且簽名完全相同,這是重寫。

向上造型和向下造型

向上轉型 一般為父類引用指向子類物件,父類引用可以呼叫子類重寫或者未重寫的方法,但是不能呼叫子類的特有方法,呼叫的屬性為父類的屬性。animal a new dog castclass a,a.name 向下造型 一般為子類引用指向父類物件,但是父類物件一般為本子類的向上轉型,否則會出現classc...

向上造型的物件

方法重寫規則 方法名相同,引數型別相同 子類返回型別小於等於父類方法返回型別,子類丟擲異常小於等於父類方法丟擲異常,子類訪問許可權大於等於父類方法訪問許可權。向上造型的物件呼叫重寫的方法 public static void main string args class super public v...

方法的過載和 重寫

2.6 方法的重寫 class mary class mary2 extends mary1 在子類中,如果乙個方法,保持父類方法的殼子,重新編寫 則 子類方法重寫 父類方法。方法的重寫和方法的過載有什麼區別?方法過載 就是在同乙個類中,方法的名字相同,但引數個數 引數的型別或返回值型別不同!方法重...