You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java继承中为何子类访问父类private字段有时需用protected?

核心原因:你的第一个程序子类根本没有直接访问父类private字段

你贴出的两段子类代码都只调用了父类的public构造方法,本身都不会触发访问权限报错。你第二个程序报错,是因为你在DeluxeBurger类里还写了直接读写父类Hamburger私有字段的逻辑(比如直接操作this.price、this.addition1这类代码),这部分你没有贴出来而已。

Java private访问规则

private修饰的类成员,只有当前类的内部代码可以直接访问,子类、其他外部类都没有直接访问权限:

  • 第一个程序的Mitsubishi子类,只是把参数传给父类Car的构造方法,是父类自己的构造方法在内部给私有字段赋值,子类全程没有碰过父类的私有字段,完全符合访问规则,当然不会报错。
  • 第二个程序你在DeluxeBurger里直接读写Hamburger的私有字段,相当于子类越过父类直接操作父类的封装属性,自然会触发权限报错。

为什么改成protected就能解决

protected修饰的成员,允许同包下所有类、不同包的子类直接访问,修改后子类就有权限直接读写这些字段,报错自然消失。

补充最佳实践

不建议直接把父类字段改成protected破坏封装性,更合理的做法是父类提供对应protected/public的getter、setter方法,子类通过调用这些方法操作父类字段,后续父类要加参数校验逻辑也不用改子类代码。

内容的提问来源于stack exchange,提问作者Machigan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:15:00