【问题标题】:Why isn't this method overridden? [duplicate]为什么不重写此方法? [复制]
【发布时间】: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


【解决方案1】:

因为Test 中的myMethod 是私有的,而Child 类看不到它。

【讨论】:

  • Jay 这样的回答最好是评论
  • 不知道为什么作为评论更好,因为我认为它回答了问题。不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 2013-06-26
  • 2016-08-27
  • 1970-01-01
  • 2018-03-26
  • 2016-03-20
  • 1970-01-01
相关资源
最近更新 更多