子类可直接访问父类protected字段,但仅限继承关系内使用,不可通过父类实例间接访问;同一包内所有类及不同包中子类(通过继承)可见,而new parent().count等跨包引用会编译失败。

子类可以直接访问父类的 protected 字段,无需 getter/setter,但必须通过继承关系在子类内部使用,不能通过父类实例间接访问。
受保护字段的可见性规则
protected 修饰的字段对以下情况可见:
- 同一包内的所有类(无论是否继承)
- 不同包中的子类(仅限通过 继承方式 访问)
关键限制:子类不能通过父类对象引用来访问该字段,例如 new Parent().protectedField 在不同包中会编译失败。
正确访问方式:在子类方法或构造器中直接使用
只要子类继承了父类,就可以像访问自己的字段一样使用父类的 protected 字段:
class Parent {
protected int count = 10;
}
class Child extends Parent {
void printCount() {
System.out.println(count); // ✅ 正确:继承后直接访问
count = 20; // ✅ 可读可写
}
}
常见错误:误用父类实例访问
即使子类能继承 protected 字段,也不能绕过继承链去“借用”父类对象来访问:
- ✅
this.count或直接写count(在子类非静态上下文中) - ❌
new Parent().count(编译错误,不同包时不可见) - ❌
parentRef.count(其中parentRef是Parent类型引用,且不在同一包)
注意事项
protected 字段不是 public,设计上鼓励封装。实际开发中建议:
- 优先用 private + protected getter/setter,提高灵活性
- 若必须暴露字段,确保子类确实需要直接修改其状态
- 注意多层继承时,protected 字段仍可被孙类访问,但无法被无关类访问
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











