以下代码中,super关键字的作用是什么?(Java)

3
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();)并调用m1();时,它不打印Yellow1\nYellow2?而是打印Yellow 1\nMagenta 2,这表明在Key对象上调用super方法实际上没有被调用。

对于super的工作原理,我感到困惑。我以为它会使它被解释为key的超类Yellow将调用m2()。

3个回答

3
当您在Key实例上调用m1()时,由于它被Key类继承且未在其中覆盖,因此将调用Yellow类的m1方法。
因此,如果您查看Yellowm1(),它将首先打印"Yellow 1",然后调用超类Magentam2()方法,该方法将打印"Magenta 2"
这是一个可视化示例:

enter image description here


2

您正在实例化一个名为Yellow的类的对象并调用m1方法。 这是如下进行的:

您正在实例化一个名为Yellow的类的对象并调用m1方法。 这是如下进行的:

System.out.println("Yellow 1");
super.m2();

因此,它会打印出"Yellow 1"并调用超类的m2方法,即Magenta,因此:

最初的回答:

System.out.println("Magenta 2");

0

Super关键字表示超类的对象,

因此,当您调用super.m2()时,它会调用超类方法m2();

如果您调用黄色类的m2()方法,只需调用m2()而不使用super

Java中的Super关键字

Java中的super关键字是一个引用变量,用于引用父类对象。

使用带有变量的super:当派生类和基类具有相同的数据成员时,会出现这种情况。

使用带有方法的super:当我们想要调用父类方法时使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接