Undergraduate ug = new Undergraduate (「Sam」, 999, 1);
Person p = (Person) ug // Type casting
p.writeOutput();
Undergraduate
是Person
的子類。本科的方法writeOutput
覆蓋在Person
。爲什麼調用Undergraduate
的writeOutput
,儘管變量p
引用了Person
類型的對象?爲什麼使用子類方法定義?
Undergraduate ug = new Undergraduate (「Sam」, 999, 1);
Person p = (Person) ug // Type casting
p.writeOutput();
Undergraduate
是Person
的子類。本科的方法writeOutput
覆蓋在Person
。爲什麼調用Undergraduate
的writeOutput
,儘管變量p
引用了Person
類型的對象?爲什麼使用子類方法定義?
這就是多態性。來自官方tutorials:
Java虛擬機(JVM)爲每個變量中引用的對象調用適當的方法。它不調用變量類型定義的方法。這種行爲被稱爲虛擬方法調用並演示了Java語言中重要多態特性的一個方面。
Java在那裏很好,並調用undergraduate.writeoutput。除了本科以外,您不能通過超級人員調用人員方法。
多態性。運行時類型被調用。 – 2014-10-31 21:20:29