【发布时间】:2021-02-08 03:01:11
【问题描述】:
为什么输出中的值是 2 和 10? myMethod 方法没有被覆盖吗? 是的,如果我将Test类中方法的访问修饰符从私有更改为任何其他,输出将如我所料 - 2和20。但我认为子类的方法应该在至少与父类的方法一样可访问 - 这是覆盖该方法的唯一条件(与访问修饰符有关)。
public class Test {
private int myMethod(int x){return x;}
public static void main(String[] args) {
Test aTest = new Test();
Test aChild = new Child();
System.out.println(aTest.myMethod(2));
System.out.println(aChild.myMethod(10));
}
}
class Child extends Test{
public int myMethod(int x){return 2*x;}
}
【问题讨论】:
-
因为aTest调用Test类的方法,aChild调用Child类的方法,所以这是冷编译时绑定和运行时绑定。 (或静态绑定和动态绑定)确实在java中阅读了一些多态性,你会理解更多,或者google动态和静态绑定
-
您不能在子类中将超类中的私有方法设为公有,您的代码工作的唯一原因是因为 main 是在 Test 中声明的,因此您可以访问私有方法
-
是的,它甚至没有被覆盖。刚刚注意到。很好地抓住了乔金
标签: java polymorphism overriding