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对象上调用对key对象的super调用。
我对super在这里的工作方式感到困惑,我认为这会使它解释为key的超类,
是黄色,将调用m2();。
答案 0 :(得分:2)
您;正在实例化类Yellow
的对象并调用m1
方法。其工作原理如下:
System.out.println("Yellow 1");
super.m2();
因此它打印"Yellow 1"
并调用m2
的超类的Magenta
,因此:
System.out.println("Magenta 2");
答案 1 :(得分:2)
在m1()
实例上调用Key
时,将调用类m1
的方法Yellow
,因为它是Key
类的继承者,并且不会在其中覆盖。
因此,如果您查看m1()
的{{1}}内部,它将首先打印Yellow
,然后它将调用超类"Yellow 1"
的方法Magenta
,将打印m2()
。
以下是可视化效果:
答案 2 :(得分:0)
Super关键字表示Super Class的对象,
因此,当您调用super.m2()
时,其调用将转到超类方法m2();
如果您调用黄色类的m2()方法,只需调用m2()
而不使用super
。
Java中的超级关键字
java中的super关键字是一个引用变量,用于 引用父类对象。
将super与变量一起使用:当派生类出现这种情况 和基类具有相同的数据成员。
将super与方法配合使用:当我们要调用父级时使用 类方法。