public class Magenta
{
public void m3()
{
System.out.println("Magenta 3");
m2();
}
public void m2()
{
System.out.println("Magenta 2");
}
}
public class Yellow extends Magenta
{
public void m1()
{
System.out.println("Yellow 1");
super.m2();
}
public void m2()
{
System.out.println("Yellow 2");
}
}
public class Key extends Yellow
{
public void m2()
{
System.out.println("Key 2");
}
}
为什么构造一个Key对象
(使用
Yellow var1 = new Key();
)和call m1();
,为什么不打印
Yellow1\nYellow2?
而是打印Yellow 1\nMagenta
2,这表明在Key对象上实际上未调用对super的调用。
我对super在这里的工作方式感到困惑,我认为这会使它解释为key的超类,
黄色,将调用m2();。
最佳答案
在m1()
实例上调用Key
时,将调用类m1
的方法Yellow
,因为该方法是由Key
类继承的,并且未在其内部覆盖。
因此,如果您查看m1()
的Yellow
内部,它将首先打印"Yellow 1"
,然后它将调用超类Magenta
的方法m2()
,该方法将打印"Magenta 2"
。
这是可视化效果: