如何理解 Java 中的 super 关键字?

文章目录

    • 调用父类的成员变量
    • 调用父类的方法
    • 调用父类的构造方法

在 Java 里, super 关键字是一个十分关键的引用变量,它主要用于在子类里引用父类的成员,像成员变量、方法以及构造方法等。

调用父类的成员变量

当子类和父类拥有同名的成员变量时,要是在子类中想要访问父类的那个成员变量,就可以借助 super 关键字。

示例:

class Parent {
    int num = 10;
}

class Child extends Parent {
    int num = 20;

    public void display() {
        // 访问父类的 num 变量
        System.out.println("父类的 num: " + super.num); 
        // 访问子类的 num 变量
        System.out.println("子类的 num: " + this.num); 
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.display();
    }
}

在上例中,Parent 类和 Child 类都有一个名为 num 的成员变量。在 Child 类的 display 方法里,super.num 用于访问父类的 num 变量,而 this.num 则用于访问子类自身的 num 变量。

调用父类的方法

当子类重写了父类的方法后,若要在子类中调用父类被重写的方法,就可以使用 super 关键字。

示例:

class Parent {
    public void show() {
        System.out.println("这是父类的 show 方法");
    }
}

class Child extends Parent {
    @Override
    public void show() {
        // 调用父类的 show 方法
        super.show(); 
        System.out.println("这是子类的 show 方法");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.show();
    }
}

Child 类重写了 Parent 类的 show 方法。在 Child 类的 show 方法中,super.show() 调用了父类的 show 方法,之后再执行子类自己的代码。

调用父类的构造方法

在子类的构造方法里,能够使用 super 关键字来调用父类的构造方法。要注意的是,super() 调用父类构造方法的语句必须是子类构造方法的第一条语句。

示例:

class Parent {
    public Parent() {
        System.out.println("父类的无参构造方法");
    }

    public Parent(int num) {
        System.out.println("父类的有参构造方法,num = " + num);
    }
}

class Child extends Parent {
    public Child() {
        // 调用父类的无参构造方法
        super(); 
        System.out.println("子类的无参构造方法");
    }

    public Child(int num) {
        // 调用父类的有参构造方法
        super(num); 
        System.out.println("子类的有参构造方法,num = " + num);
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println("创建无参的 Child 对象");
        new Child();
        System.out.println("创建有参的 Child 对象");
        new Child(10);
    }
}

Child 类的构造方法中,使用 super() 调用父类的无参构造方法,使用 super(num) 调用父类的有参构造方法。

你可能感兴趣的:(Java,java,开发语言)