在Java中,super是一个关键字,用于在子类中访问父类的成员(包括构造函数、方法和字段)。它的核心用途可分为以下三类:
1. 调用父类构造函数2. 调用父类方法- 作用:在子类中通过super.方法名()调用父类被覆盖(override)的方法,避免递归调用子类方法。
- 场景:常用于扩展父类方法的功能(先执行父类逻辑,再添加子类逻辑)。
- 示例:class Parent { void print() { System.out.println("父类方法"); }}class Child extends Parent { @Override void print() { super.print(); // 先调用父类方法 System.out.println("子类方法"); }}
3. 访问父类字段- 作用:通过super.字段名直接访问父类中被子类隐藏的字段(尤其是字段名相同时)。
- 注意:若父类字段未被隐藏,通常直接使用字段名即可(无需super)。
- 示例:class Parent { int x = 10;}class Child extends Parent { int x = 20; void print() { System.out.println(super.x); // 输出父类的x(10) System.out.println(this.x); // 输出子类的x(20) }}
关键注意事项- 构造函数调用:若子类构造函数未显式调用super(),编译器会自动插入super()(前提是父类有无参构造函数)。
- 静态上下文:super不能用于静态方法(静态成员属于类,而非实例)。
- 与this的区别:this指向当前对象,而super指向父类的成员。
总结super是Java中实现继承的核心关键字,通过它可以在子类中精准控制父类的初始化、方法调用和字段访问,避免命名冲突并确保代码可维护性。合理使用super能清晰表达继承关系中的逻辑层次。