19. super关键字的用法有哪些
大约 3 分钟
super
关键字在Java中用于引用父类的成员(包括方法和变量),以及调用父类的构造方法。它通常用于在子类中调用父类的功能,从而实现类的继承和多态性。以下是super
关键字的常见用法:
1. 调用父类的构造方法
在子类的构造方法中,super
可以用于调用父类的构造方法。这通常用于在子类初始化之前先初始化父类的成员变量。使用super
调用父类构造方法时,它必须是子类构造方法中的第一条语句。
class Parent {
int x;
Parent(int x) {
this.x = x;
System.out.println("Parent constructor called");
}
}
class Child extends Parent {
Child(int x) {
super(x); // 调用父类的构造方法
System.out.println("Child constructor called");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child(10); // 输出: Parent constructor called Child constructor called
}
}
2. 调用父类的方法
如果子类重写了父类的方法,子类可以通过super
关键字调用被重写的父类版本的方法。这在需要在子类中扩展或修改父类行为时非常有用。
class Parent {
void display() {
System.out.println("Parent display method");
}
}
class Child extends Parent {
void display() {
super.display(); // 调用父类的方法
System.out.println("Child display method");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display(); // 输出: Parent display method Child display method
}
}
3. 访问父类的成员变量
当子类和父类中有相同名字的成员变量时,子类可以使用super
关键字来访问父类中的成员变量。这在子类需要引用父类中的特定变量时很有用。
class Parent {
int x = 10;
}
class Child extends Parent {
int x = 20;
void display() {
System.out.println("Child x: " + x);
System.out.println("Parent x: " + super.x); // 访问父类的成员变量
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display(); // 输出: Child x: 20 Parent x: 10
}
}
4. 调用父类的重载方法
在子类中,可以使用super
来调用父类中与子类方法重载的方法,即方法名相同但参数列表不同的方法。
class Parent {
void display(String message) {
System.out.println("Parent: " + message);
}
}
class Child extends Parent {
void display() {
System.out.println("Child display method");
}
void display(String message) {
super.display(message); // 调用父类的重载方法
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display(); // 输出: Child display method
child.display("Hello"); // 输出: Parent: Hello
}
}
总结
super
关键字在Java中主要用于以下几个场景:
- 调用父类的构造方法:在子类构造方法中调用父类的构造方法,通常用于初始化继承自父类的成员变量。
- 调用父类的方法:在子类中调用父类的同名方法,通常用于在扩展或重写父类方法时保留原有的行为。
- 访问父类的成员变量:在子类中访问父类的成员变量,避免与子类中同名变量的冲突。
- 调用父类的重载方法:在子类中调用父类的重载方法,确保能够使用父类定义的所有方法版本。
super
关键字是Java继承机制中一个重要的工具,它使得子类能够访问和使用父类的属性和方法,从而实现更为灵活的代码复用和扩展。