我對以下示例(更確切地說,使用一個特定行)存在一些問題。下面的代碼(如下問題之後):Java多態 - 具體示例
public class Up
{
public void cc(Up u) {System.out.println("A");}
public void cc(Middle m) {System.out.println("B");}
}
public class Middle extends Up
{
public void cc(Up u) {System.out.println("C");}
public void cc(Down d) {System.out.println("D");}
}
public class Down extends Middle
{
public void cc(Up u) {System.out.println("E");}
public void cc(Middle m) {System.out.println("F");}
}
public class Test
{
public static void main(String... args)
{
Up uu = new Up();
Up pp = new Middle();
Down dd = new Down();
uu.cc(pp); // "A"
uu.cc(dd); // "B"
pp.cc(pp); // "C"
pp.cc(dd); // "B"
dd.cc(pp); // "E"
dd.cc(dd); // "D"
}
}
現在uu.cc(pp);
和uu.cc(dd);
是很明顯的,因爲UU是Up
和pp
的實例「看起來像」一個Up
藏漢(在編譯時)。對於dd
最合適的方法是cc(Middle m)
,因爲dd
是從Middle
繼承的Down
的實例。
我遇到的最多問題是pp.cc(dd);
和dd.cc(dd)
。 對於在編譯時或運行時確定何時以及如何確定這些方法,我確實有點困惑。 如果有人能幫助我理解,我會很高興。