在子类实例方法中可用super.方法名()调用父类被覆盖的同名方法,需确保方法名、参数及访问权限匹配;不可在静态方法中使用super;this与super可共存,super调用不改变当前this上下文。

在子类普通方法中,可以用 super.方法名() 显式调用父类中被覆盖的同名方法。
语法格式要正确
调用时需确保:
- 方法名与父类中定义的一致(包括大小写);
- 参数个数和类型与父类方法签名匹配;
- 该方法在父类中是可访问的(非 private)。
例如:
class Animal {void speak() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
void speak() {
super.speak(); // 调用父类被覆盖的 speak()
System.out.println("Dog barks");
}
}
不能在静态方法中使用 super
super 是与具体对象实例绑定的关键字,只适用于实例方法。
- 如果在 static 方法里写 super.method(),编译会直接报错;
- 静态方法属于类本身,不涉及继承链上的对象上下文。
注意 this 和 super 的调用顺序
在一个方法内部,可以同时使用 this 和 super,但要注意:
- super.方法名() 不影响当前对象的 this 引用;
- 它只是委托父类实现执行逻辑,返回后仍在子类方法上下文中继续运行;
- 可以多次调用,也可以和其他语句任意穿插(只要语法合法)。
常见误用场景
- 父类方法是 private → 编译错误,子类根本看不到该方法;
- 拼错方法名或参数不匹配 → 编译失败,提示“cannot find symbol”;
- 在构造器以外的静态上下文中使用 → 报 “illegal start of expression” 或类似错误;
- 误以为 super 调用会跳过子类重写逻辑 → 实际上它只是额外执行父类版本,不影响当前流程。











