在 Java 中,private 成员不能被子类直接继承访问,但从“内存/对象结构”角度来说,它确实存在于子类对象中,只是子类无权直接访问。
private 成员private 成员public / protected 方法间接访问Java 的访问控制规则:
| 修饰符 | 本类 | 同包 | 子类 | 其他 |
|---|---|---|---|---|
| private | ✅ | ❌ | ❌ | ❌ |
| protected | ✅ | ✅ | ✅ | ❌ |
| public | ✅ | ✅ | ✅ | ✅ |
private 只对本类可见,子类不算“本类”,所以不能直接用。
class Parent {
private int secret = 10;
public int getSecret() {
return secret;
}
}
class Child extends Parent {
void test() {
// System.out.println(secret); // ❌ 编译错误
System.out.println(getSecret()); // ✅ 间接访问
}
}
✅ secret 存在于 Child 对象中
❌ 但 Child 不能直接写 secret
不对
private 字段会随父类对象结构一起存在子类中,只是不能“直接看”。
正确,但不能被重写 ≠ 不存在
private 方法 不能 overrideprotected 的对比(重点)protected int x; // 子类可直接访问
private int y; // 子类不可直接访问
如果希望子类能用,又不想公开 → 用 protected
Java 中
private不能被子类直接继承访问,但作为父类的一部分,它存在于子类对象中,只能通过父类暴露的方法使用。
如果你愿意,我也可以从 JVM 内存结构 / 字节码角度 再讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。