小编典典

覆盖Java中的私有方法

java

在Java中重写私有方法是无效的,因为父类的私有方法是“自动最终的,并且对派生类是隐藏的”。我的问题主要是学术上的。

不允许父级的私有方法被“重写”(即,在子类中以相同的签名独立实现),这是否违反封装规范?根据封装的原理,子类不能访问或继承父级的私有方法。它是隐藏的。

那么,为什么应该限制子类实现自己的具有相同名称/签名的方法呢?这是否有一个良好的理论基础,还是仅仅是某种务实的解决方案?其他语言(C ++或C#)对此有不同的规定吗?


阅读 811

收藏
2020-03-17

共1个答案

小编典典

你不能覆盖私有方法,但可以毫无问题地在派生类中引入一个私有方法。这样可以编译:

class Base
{
   private void foo()
   {
   }
}

class Child extends Base
{
    private void foo()
    {
    }
}

请注意,如果你尝试将@Override注释应用于该对象,Child.foo()则会出现编译时错误。只要你有你的编译器/ IDE设置,给你警告或错误,如果你缺少一个@Override注释,都应该很好。诚然,我更喜欢将C#方法override用作关键字,但是用Java显然已经太晚了。

至于C#对“覆盖”私有方法的处理-私有方法最初不能是虚拟的,但是你当然可以在基类中引入一个与私有方法同名的新私有方法。

2020-03-17