關於java多型性

  • 作者:由 匿名使用者 發表于 舞蹈
  • 2022-07-26

關於java多型性匿名2014.11.27 回答

該問題的關鍵有兩點:

一是子類與父類的關係,二是過載方法的呼叫問題。

子類物件可以直接當成父類物件使用,但反過來就不可以。舉例來說,人是父類,學生是人的子類,所以學生物件一定具備人物件的屬性,但是人物件就未必具有學生物件的特性。所以學生物件可以當做人物件來使用,但是人物件就不能當做學生物件使用。注意當把子類物件當成父類物件使用時,子類物件將失去所有的子類特性,只保留與父類同名的屬性和方法(同名方法不僅是函式名相同,而且引數型別也要一樣,否則不予保留)。

一個類中如果定義了過載的方法,則系統在呼叫方法時,會根據引數的型別自動選擇呼叫合適的方法。

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

Top