在 Java 中,**“private 不可继承”**这个说法,准确一点讲应该是:
子类不能继承父类的 private 成员(字段和方法),也不能直接访问它们,但它们依然存在(物理上在对象里)。
下面分层解释原因和细节。
private 的语义就是“仅本类可见”Java 的访问控制规则:
| 修饰符 | 本类 | 同包 | 子类 | 任意 |
|---|---|---|---|---|
| private | ✅ | ❌ | ❌ | ❌ |
| default | ✅ | ✅ | ❌* | ❌ |
| protected | ✅ | ✅ | ✅ | ❌ |
| public | ✅ | ✅ | ✅ | ✅ |
private明确禁止在**类外部(包括子类)**访问。
所以:
class Parent {
private int x = 10;
}
class Child extends Parent {
void test() {
// System.out.println(x); // ❌ 编译错误
}
}
✅ 在,但看不到
从内存结构看:
Child c = new Child();
对象中有:
只是 子类代码无权直接访问。
通过 父类提供的 public / protected 方法:
class Parent {
private int x = 10;
public int getX() {
return x;
}
}
class Child extends Parent {
void test() {
System.out.println(getX()); // ✅
}
}
这就是 封装思想:
class Parent {
private void show() {}
}
class Child extends Parent {
// 这不是重写,是一个新方法
void show() {}
}
原因:
class Parent {
private Parent() {}
}
➡ 子类 无法实例化(除非父类在内部提供静态方法)
private 不是“不存在于子类”,而是“对子类不可见、不可访问、不可重写”。
这是 Java 封装机制的核心设计,而不是技术限制。
如果你愿意,我也可以从 JVM 层面 / 字节码角度 或 和 C++ / Kotlin 对比 再讲一层。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。