super在java中是什么意思

super在java中是什么意思
最新回答
软喵酱メ

2020-07-02 20:25:43

在Java中,super是一个关键字,用于在子类中访问父类的成员(包括构造函数、方法和字段)。它的核心用途可分为以下三类:

1. 调用父类构造函数
  • 作用:在子类的构造函数中,通过super()显式调用父类的构造函数,确保父类被正确初始化。
  • 规则

    super()必须是子类构造函数的第一条语句(与this()互斥)。

    若父类没有无参构造函数,子类必须显式调用父类的有参构造函数。

  • 示例:class Parent { int x; Parent(int x) { this.x = x; }}class Child extends Parent { int y; Child(int x, int y) { super(x); // 调用父类构造函数 this.y = y; }}
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能清晰表达继承关系中的逻辑层次。