super是java中用于显式访问父类成员的关键字,可调用父类被隐藏的字段、被重写的方法及构造器,但不能访问private成员,且super()必须位于子类构造方法首行。

super 是 Java 中用于在子类中显式访问父类成员的关键字,主要解决子类与父类成员同名时的歧义问题,也能在构造方法中调用父类构造器。
访问父类的属性和方法
当子类定义了与父类同名的字段或方法(非 private),直接使用名称会访问子类自身的成员。此时用 super.成员名 可明确调用父类版本:
- super.fieldName:访问父类中被子类隐藏的字段(注意:不能访问父类 private 字段)
- super.methodName(...):调用父类中被子类重写(override)的方法
例如:
class Parent { int x = 10; void show() { System.out.println("Parent"); } }
class Child extends Parent {
int x = 20;
void display() {
System.out.println(x); // 输出 20(子类字段)
System.out.println(super.x); // 输出 10(父类字段)
show(); // 输出 "Parent"(实际调用子类继承/未重写的方法)
super.show(); // 明确调用父类方法
}
}
在构造方法中调用父类构造器
子类构造方法默认第一行隐式调用 super()(无参父类构造器)。若父类没有无参构造器,或你想调用特定参数的父类构造器,则必须显式使用 super(...),且必须是子类构造方法的第一条语句:
- super():调用父类无参构造器
- super(arg1, arg2):调用父类匹配参数列表的构造器
错误示例:super() 写在第二行、或与 this() 同时出现,都会编译失败。
不能访问父类 private 成员
super 无法突破封装限制。父类的 private 字段或方法对子类不可见,即使通过 super 也无法访问。这是 Java 访问控制的基本规则,不是 super 的限制,而是语言设计使然。
super 和 this 的区别要分清
super 指向当前对象的父类部分,用于向上委托;this 指向当前对象自身,常用于区分形参与字段、调用本类其他构造器。两者都不能在 static 上下文中使用(因为不依赖具体实例)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











