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 在子類中,如果乙個方法,保持父類方法的殼子,重新編寫 則 子類方法重寫 父類方法。方法的重寫和方法的過載有什麼區別?方法過載 就是在同乙個類中,方法的名字相同,但引數個數 引數的型別或返回值型別不同!方法重...