Java中子类能否访问父类成员取决于修饰符与包关系:private完全不可见;default仅同包子类可访问;protected允许同包及跨包子类访问;public无限制;重写时权限不可收缩。

Java 中继承对权限修饰符的处理,核心在于“子类能否访问父类成员”——不是看成员是否被继承,而是看能否在子类中直接使用。private 成员虽被隐式继承,但不可见、不可访问;而 public、protected 和默认(包访问)成员,在满足对应范围前提下可被子类调用或重写。
子类能访问哪些父类成员?
取决于父类成员的修饰符和子类所处位置:
- public:任何子类都能直接访问,无论是否同包
- protected:同包子类可访问;不同包的子类也能访问(这是 protected 的关键设计目的)
- 默认(缺省):仅限同包子类访问;跨包子类无法访问,哪怕有继承关系
- private:子类完全不可见,不能直接访问或重写;只能通过父类提供的 public/protected 方法间接操作
重写方法时的权限限制
子类重写父类方法,权限修饰符不能比父类更严格:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 父类是 public,子类重写必须是 public
- 父类是 protected,子类可升级为 public,但不能降为 default 或 private
- 父类是 default,子类重写只能是 default 或 public(不能是 protected,因跨包时 protected 可见而 default 不可见,会破坏继承契约)
构造器与继承的关系
构造器不参与继承,但子类构造过程必须触发父类初始化:
立即学习“Java免费学习笔记(深入)”;
- 子类构造方法默认第一行执行 super()(调用父类无参构造)
- 若父类无无参构造,子类需显式调用 super(...) 指定参数
- 父类构造器本身的访问权限影响子类能否调用:private 构造器会导致子类无法继承该类(除非父类提供其他可访问的构造方式)
实际开发中的常见误区
容易混淆“继承了”和“能用了”:
- 声明为 private 的字段,子类里写 this.fieldName 会编译报错,不是“没继承”,而是“看不见”
- 不同包下的子类访问父类 default 方法,编译失败——这不是 bug,是权限机制生效
- 把父类 protected 方法改成子类 private,编译不通过,JVM 会拒绝这种降权重写
- 静态成员遵循同样权限规则,但不受“重写”影响,只有隐藏(hiding)

















