protected的核心作用是允许子类继承并安全使用父类关键成员,同时限制包外无关类访问;它基于继承关系和声明类型可见,跨包时仅子类自身可访问,且重写时权限不可降级。

Java 中 protected 的核心作用是:让子类能安全继承并使用父类的关键成员,同时防止包外无关类随意访问。它不是“子类能任意操作父类对象”,而是“子类自身继承来的那部分才可见”。用错最常见的情况就是拿父类引用去调用——编译直接报错。
子类怎么正确访问父类的 protected 成员
只要满足继承关系,并在子类内部通过 子类实例本身 或 this 访问,就合法:
- 子类方法中直接写
protectedMethod()或protectedField = "xxx" - 显式用
this.protectedMethod()或super.protectedMethod()也行 - 构造器里可通过
super(...)调用父类 protected 构造器(如果存在)
跨包时特别注意:类型决定可见性
哪怕实际对象是子类,只要变量声明类型是父类,就不允许访问 protected 成员:
- ✅
Child c = new Child(); c.protectedMethod(); - ❌
Parent p = new Child(); p.protectedMethod();—— 编译失败,类型是 Parent - ❌
new Parent().protectedMethod();—— 包外不能 new 父类再调用
和 default 权限的关键区别
default(不写修饰符)只认包,不认继承;protected 既认包,也认继承:
立即学习“Java免费学习笔记(深入)”;
- 同包下:default 和 protected 对子类都可见
- 跨包时:default 成员对子类不可见,protected 成员依然可见
- 跨包普通类(非子类):default 和 protected 都不可见
重写时的权限规则
子类重写父类 protected 方法时,访问权限不能更严格:
- 可以改为
public(更宽松) - 可以保持
protected(相同) - 不能改为
default或private(更严格,编译报错)


















