Java类继承,子类可以访问私有(private)字段,为什么?

标签 java inheritance

我的代码非常类似于以下内容。

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/

相关文章:

java - 如何在 BoxLayout 中粘到容器顶部

java - 如何使Java(AppEngine)中的延迟任务在失败时不重复?

java - 应用程序被杀死时不会调用 Firebase onMessageReceived

javascript - Javascript 中的原型(prototype)和非原型(prototype)继承(区别)

python - 为什么 PyTorch 自定义模块中需要 super 构造函数?

c++ - 继承和重写 - 从 BaseClass 调用重写 SubMethod

java - 从 float 中删除数字标记并转换为整数

C#:接口(interface)继承getters/setters

在 CPP 文件 (Visual Studio) 中实现的 C++ 模板错误

java - 安卓。应用程序在几秒钟后中断。工作