子类可直接访问父类public/protected成员变量,但不可访问private变量;访问private需通过父类提供的public/protected getter方法;同名时用super.显式访问父类变量,推荐封装字段并使用getter/setter。

Java 中子类可以直接访问父类的 public 和 protected 成员变量(非 private),但不能直接访问父类的 private 成员变量。若需访问 private 变量,必须通过父类提供的 public/protected getter 方法。
能直接访问的父类变量
当父类成员变量被声明为 public 或 protected 时,子类对象可直接使用变量名访问(无需加 super.),前提是未在子类中重名定义:
- 如果子类没有同名变量,直接写
变量名即可(编译器自动向上查找) - 如果子类定义了同名变量,会覆盖(遮蔽)父类变量;此时要用
super.变量名显式访问父类版本
不能直接访问的父类变量(private)
父类的 private 成员变量对子类不可见,编译会报错。正确做法是:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在父类中提供 public/protected 的 getter 方法(如
getAge()) - 子类中调用
super.getAge()或直接getAge()(若方法未被重写) - 不建议为 private 变量提供 public setter,除非业务需要
使用 super 访问父类变量的典型场景
当子类和父类有同名成员变量时,super 是唯一能明确访问父类变量的方式:
-
super.name→ 访问父类的name变量(即使子类也有name) -
this.name→ 访问子类自己的name变量 - 构造方法中常用
super(…)调用父类构造器,但那是方法调用,不是变量访问
推荐实践:优先封装,少用直接访问
现代 Java 开发中更倾向将字段设为 private,通过 getter/setter 控制访问:
- 避免子类意外修改父类内部状态
- 便于后期在 getter 中添加逻辑(如日志、校验、懒加载)
- 符合面向对象的封装原则,提升可维护性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










