我对以下示例(更确切地说,使用一个特定行)存在一些问题。下面的代码(如下问题之后):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)
。 对于在编译时或运行时确定何时以及如何确定这些方法,我确实有点困惑。 如果有人能帮助我理解,我会很高兴。