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"

这是可视化效果:

java - 在以下代码的情况下,super如何工作? (java)-LMLPHP

10-04 12:53