子类可通过super访问父类非private属性,需满足public/protected/包级权限;private属性须通过getter/setter间接访问;同名属性时用super.明确调用父类版本;构造器中super()必须首行调用以初始化父类属性。

子类可以通过 super 关键字访问父类中被继承且可访问的属性(即非 private 的成员变量),但需注意访问权限和使用场景。
super 访问父类属性的前提条件
只有父类中声明为 public、protected 或默认(包级)访问权限的属性,才能在子类中通过 super 直接访问。private 属性不可见,无法用 super 访问。
- 如果父类属性是 private,子类不能直接访问,只能通过父类提供的 public/protected getter 方法间接获取
- 若父类属性是 protected 或包内可见,子类可直接用 super.属性名 读写(除非子类重写了同名属性)
- 子类中若定义了与父类同名的属性,会隐藏父类属性;此时必须用 super.属性名 明确访问父类版本
常见写法:在子类构造器中初始化父类属性
子类构造器常通过 super() 调用父类构造器来设置父类属性,这是最典型也最安全的方式。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- super(参数...) 必须是子类构造器的第一条语句
- 它不直接访问某个属性,而是委托父类完成属性初始化
- 例如:super(name, age); 将值传给父类构造器,由父类内部赋值给对应字段
运行时直接读写父类属性(非 private)
当父类属性不是 private,且子类未定义同名属性时,可直接用 super.属性名 访问。
- 读取:String n = super.name;
- 修改:super.age = 25;
- 若子类自己也声明了 String name;,则 name 指向子类字段,super.name 才指向父类字段
替代方案:优先使用 getter/setter
即使父类属性是 protected,也建议通过父类提供的 getter/setter 方法访问,更符合封装原则。
- 避免直接暴露字段,便于后期加校验或日志
- 如果父类属性是 private,这是唯一合法途径
- 例如:super.getName() 或 super.setName("Alice")
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










