關於java多型性
- 2022-07-26
該問題的關鍵有兩點:
一是子類與父類的關係,二是過載方法的呼叫問題。
子類物件可以直接當成父類物件使用,但反過來就不可以。舉例來說,人是父類,學生是人的子類,所以學生物件一定具備人物件的屬性,但是人物件就未必具有學生物件的特性。所以學生物件可以當做人物件來使用,但是人物件就不能當做學生物件使用。注意當把子類物件當成父類物件使用時,子類物件將失去所有的子類特性,只保留與父類同名的屬性和方法(同名方法不僅是函式名相同,而且引數型別也要一樣,否則不予保留)。
一個類中如果定義了過載的方法,則系統在呼叫方法時,會根據引數的型別自動選擇呼叫合適的方法。
1a1。shows(b),在A中沒有含有B類引數的方法,但是含有A類引數的方法,根據子類物件父類可用的原則,所以呼叫方法
publicStringshow(Aobj)。。。{return(“AandA”);}
2a1。show(c),C類是B類的子類,而B類又是A類的子類,所以C類物件可以當製作A類物件使用。結果同上。
3a1。show(d),根據引數型別直接呼叫A中的方法
publicStringshow(Dobj)。。。{
return(“AandD”);
}
4a2。show(b),a2本來是一個B物件,但是將其賦給了A類變數,所以a2只保留了與父類A同名的屬性和方法。a2。show(b)呼叫B類中的保留的與父類同名同參方法
publicStringshow(Aobj)。。。{
return(“BandA”);
}
5a2。show(c),B類的保留方法中沒有C類引數方法,但是有含有C的父類A的引數方法,所以呼叫的方法
publicStringshow(Aobj)。。。{
return(“BandA”);
}
6a2。show(d),呼叫的是A類中的
publicStringshow(Dobj)。。。{
return(“AandD”);
}
7b。show(b),呼叫B類中的
publicStringshow(Bobj)。。。{
return(“BandB”);
}
8b。show(c),B類中沒有C類引數的方法,但是有B類引數的方法,所以呼叫方法publicStringshow(Bobj)。。。{
return(“BandB”);
}
9b。show(d),解釋同8
上一篇:瑜伽老師分為哪幾個級別啊?
下一篇:聖地安列斯海灘舞會!