private彻底屏蔽,子类不可见不可用;default仅同包可见;protected专为继承设计,支持跨包子类访问与重写(权限可升级);public完全开放,但重写时权限不可收窄。

Java 继承关系中,权限修饰符直接决定子类能否访问、重写或对外暴露父类成员。不是“能不能继承”,而是“能不能看见、能不能用、能不能改”。关键看修饰符本身的设计意图和编译器的强制规则。
private:彻底屏蔽,子类完全不可见
父类用 private 修饰的字段或方法,子类编译时就无法识别——既不能直接调用,也不能重写。哪怕子类写一个同名同参的方法,也只是新增一个独立方法,和父类毫无关系。这是因为 private 的作用域严格限定在声明它的那个类内部。
- 想让子类间接使用?父类得提供 public 或 protected 的 getter/setter 或委托方法
- 内存里它依然存在,但语法上子类连名字都“不知道”
default(包私有):同包是底线,跨包子类也无权访问
不写任何修饰符的成员,默认只对同一包内的所有类开放。子类如果和父类不在同一个包,哪怕有继承关系,也无法访问这些成员,更谈不上重写。
- 适合模块内部协作,比如工具类里的辅助逻辑,只给同包子类调用
- 外部使用者必须走 public 接口,不能绕过封装层
protected:专为继承设计,子类友好但有限制
protected 是继承场景的“黄金权限”:同一包内所有类可访问;不同包的子类,在自己类的方法体内也能访问父类的 protected 成员(注意:不是通过子类对象直接调用,而是在子类方法中用 super.xxx 或直接写名字)。
- 子类重写 protected 方法时,访问权限可以升级为 public,但不能降级为 default 或 private
- 它允许复用和扩展,又防止无关类随意调用,是封装与可扩展性的平衡点
public:完全开放,但重写不能收窄权限
父类的 public 成员对子类完全可见,可自由访问、可重写。但重写时有一个硬性约束:子类方法的访问权限不能比父类更严格。
- public 方法可以被重写为 public,不能改成 protected、default 或 private
- static 和 final 方法不参与重写机制,@Override 注解会报错,编译期就拦截
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











