【发布时间】:2011-01-01 06:58:27
【问题描述】:
正如here 的简要描述,在 Java 中重写私有方法是无效的,因为父类的私有方法是“自动最终的,并且对派生类隐藏”。我的问题主要是学术性的。
不允许父类的私有方法被“覆盖”(即,在子类中独立实现,具有相同的签名),这如何不违反封装?父类的私有方法不能被子类访问或继承,符合封装原则。它被隐藏了。
那么,为什么要限制子类实现自己的具有相同名称/签名的方法?这是否有很好的理论基础,或者这只是某种务实的解决方案?其他语言(C++ 或 C#)对此有不同的规定吗?
【问题讨论】:
-
我想你可能对“覆盖”的含义有些困惑。
-
谢谢 mmyers .. 我不相信我对“覆盖”的含义感到困惑,尽管不可否认,我的描述有歧义,主要是由于对 java 中 @Override 语法的需求的混淆实现覆盖。
-
我这么说的原因是您一开始就说“在 Java 中重写私有方法是无效的”——这要么是误导,要么是错误的,这取决于您所说的“无效”是什么意思。我看到你已经在下面澄清了。
标签: java inheritance private-methods