关键字super在java谜题中的作用
我的问题是为什么输出是关键字super在java谜题中的作用,java,inheritance,private,super,Java,Inheritance,Private,Super,我的问题是为什么输出是BO,D1而不是BO,B1。我不明白super关键字如何起到调用子类而不是父类的方法的作用。因为类B中的方法m0是私有的,它不会被类D覆盖。所以super关键字确保调用的测试函数的版本来自于超类(特别是B.test(),而不是反复调用D.test() 但这并不能完全回答你的问题 第二项之所以是D1而不是B0,是因为D.m1()多态性地覆盖了B.m1() 第一项之所以是B0而不是D0,是因为D.m0()不会覆盖B.m0(),因为B.m0是私有的。方法m0在类B中是私有的。因此
BO,D1
而不是BO,B1
。我不明白super
关键字如何起到调用子类而不是父类的方法的作用。因为类B中的方法m0
是私有的,它不会被类D覆盖。所以super关键字确保调用的测试函数的版本来自于超类(特别是B.test(),而不是反复调用D.test()
但这并不能完全回答你的问题
第二项之所以是D1而不是B0,是因为D.m1()多态性地覆盖了B.m1()
第一项之所以是B0而不是D0,是因为D.m0()不会覆盖B.m0(),因为B.m0是私有的。方法m0在类B中是私有的。因此继承时,m0方法是私有的,不会在类D中继承。因此,执行类B的方法m0并打印“BO” 但是当执行这个.m1()时,它被类D中的方法m1覆盖。因此它打印“D1”
public class B {
public B() {
}
private void m0(){
System.out.println("BO");
}
public void m1(){
System.out.println("B1");
}
public void test(){
this.m0();
this.m1();
}
}
public class D extends B{
/**
*
*/
public D() {
}
public void m0(){
System.out.println("DO");
}
public void m1(){
System.out.println("D1");
}
public void test(){
super.test();
}
public static void main(String[] args) {
B d=new D();
d.test();
}
}