为什么要用super?
在 Java 中,super 关键字用于访问父类的成员变量、方法或构造方法。主要有以下几个情况下需要使用 super 关键字:
1.访问父类的成员变量: 如果子类和父类具有同名的成员变量,为了明确指定访问父类的成员变量,可以使用 super 关键字。
class Parent {
int value = 10;
}
class Child extends Parent {
int value = 20;
public void display() {
System.out.println("Child value: " + value); // 输出子类的value
System.out.println("Parent value: " + super.value); // 输出父类的value
}
}
2.调用父类的方法: 如果子类覆盖了父类的方法,但是仍然想在子类中调用父类的方法,可以使用 super 关键字。
class Parent {
public void display() {
System.out.println("Parent display");
}
}
class Child extends Parent {
@Override
public void display() {
super.display(); // 调用父类的display方法
System.out.println("Child display");
}
}
3.调用父类的构造方法: 在子类的构造方法中,可以使用 super() 来调用父类的构造方法,以完成父类的初始化工作。
class Parent {
public Parent() {
System.out.println("Parent constructor");
}
}
class Child extends Parent {
public Child() {
super(); // 调用父类的构造方法
System.out.println("Child constructor");
}
}
一个简单的例子
使用 super 关键字可以方便地访问父类的成员、方法和构造方法,从而实现代码的复用和扩展。
假设我们有一个 Vehicle 类,它有一个 start() 方法来启动车辆,并且有一个子类 Car,它继承了 Vehicle 类并覆盖了 start() 方法。在 Car 类中,我们想要在启动汽车之前先进行一些特定于汽车的初始化工作,然后再调用父类 Vehicle 的 start() 方法启动汽车。
class Vehicle {
public void start() {
System.out.println("Vehicle is starting...");
}
}
class Car extends Vehicle {
@Override
public void start() {
// 在启动汽车之前进行特定于汽车的初始化工作
System.out.println("Initializing car...");
// 调用父类的start()方法来启动汽车
super.start();
}
}
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.start();
}
}