我的代码非常类似于以下内容。
package my.pkg;
public abstract class X {
private CapableField field;
public abstract void doSomething();
public X(CapableField fieldValue) {
this.field = fieldValue;
}
}
还有:
package my.pkg.sub;
public class Y extends my.pkg.X {
public void doSomething() {
this.field.doSomething();
}
}
为什么这在 Java 中是合法的代码?我认为“私有(private)”意味着该字段不能在子类中直接访问,这是类继承的一个相当基本的原则。让 X
具体化而不是抽象化不会改变任何事情。
如果我特别希望某个字段或成员函数只能在定义它的类中访问,而不是在定义类的某个随机子类中访问,我该怎么办?
最佳答案
这不是真的。您很可能实际上将 Y 定义为 inner class 。这样外部类的私有(private)字段确实是可见的。
关于Java类继承,子类可以访问私有(private)字段,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5065053/