【Java核心基础】一文带你了解Java中super关键字的重要作用

【Java核心基础】一文带你了解Java中super关键字的重要作用_第1张图片

“super”关键字在编程中扮演着重要角色,它允许我们直接访问父类中的属性、方法或构造函数,即使子类中存在同名元素。此外,“super()”在子类构造函数中调用父类初始化操作,确保父类属性正确初始化。有时,“super”还可代表当前对象的父类实例,使我们能像操作父类实例一样调用其方法或访问属性。

定义

【Java核心基础】一文带你了解Java中super关键字的重要作用_第2张图片

super关键字是Java中提供了一种机制,它使得子类可以方便地访问和操作其父类的成员,它是面向对象编程中继承概念的一个重要组成部分,有助于实现代码的重用和多态性,super关键字有如下特点:

  1. 访问父类的构造方法:使用 super() 可以在子类的构造方法中调用父类的构造方法,这通常用于初始化父类中定义的实例变量。
  2. 访问父类的成员变量:如果在子类中定义了一个与父类同名的成员变量,可以使用 super 关键字来引用父类的成员变量。
  3. 访问父类的方法:如果在子类中覆盖(override)了父类的方法,可以使用 super 关键字来调用父类中被覆盖的方法。
  4. 表示父类类型的引用:在子类的实例方法中,super 可以作为一个引用变量来使用,它引用了当前对象的父类类型。

“super”关键字在编程中非常有用,它允许我们直接访问父类中的属性、方法或构造函数,确保我们访问的是父类中的成员而不是子类中的,在子类构建过程中,可以使用“super()”调用父类的初始化操作,此外,“super”还能代表当前对象的父类实例,使我们可以方便地调用父类的方法或访问其属性。

代码案例

【Java核心基础】一文带你了解Java中super关键字的重要作用_第3张图片

下面列举了super关键字的几种应用场景,如下:

案例1:调用父类构造方法,这个案例演示了如何在子类的构造方法中通过 super 关键字明确地调用父类的构造方法,以确保父类部分也被正确地初始化。

class Parent {  
    int number;  
  
    // 父类的构造方法  
    Parent(int number) {  
        this.number = number;  
    }  
}  
  
class Child extends Parent {  
    String name;  
  
    // 子类的构造方法,通过super关键字调用父类的构造方法  
    Child(int number, String name) {  
        super(number);  // 调用父类的构造方法,并传递number参数  
        this.name = name;  
    }  
}  
  
public class Test {  
    public static void main(String[] args) {  
        Child child = new Child(10, "Alice");  // 创建Child对象,并传递参数给父类和子类的构造方法  
        System.out.println("Number: " + child.number);  // 输出 "Number: 10"  
        System.out.println("Name: " + child.name);      // 输出 "Name: Alice"  
    }  
}

最后一行输出:

Number: 10  
Name: Alice

在上面的代码中,Child 类继承了 Parent 类,当创建一个 Child 对象时,我们需要为 ParentChild 都提供必要的信息,通过在 Child 的构造方法中使用 super(number),我们明确地调用了 Parent 类的带有一个整数参数的构造方法。

案例2:访问父类方法,这个案例演示了如何在子类中通过 super 关键字访问被重写的父类方法。

// 父类  
class Parent {  
    void showMessage() {  
        System.out.println("Message from Parent");  
    }  
}  
  
// 子类  
class Child extends Parent {  
    void showMessage() {  
        super.showMessage(); // 使用super关键字调用父类的showMessage()方法  
        System.out.println("Message from Child");  
    }  
}  
  
// 测试类  
public class SuperExample {  
    public static void main(String[] args) {  
        Child child = new Child(); // 创建Child对象  
        child.showMessage(); // 调用showMessage()方法,输出父类和子类的信息  
    }  
}

最后一行输出:

Child's show()  
Parent's show()

在上面的代码中,Child 类重写了 Parent 类的 show() 方法,但是,我们还在 Child 类中定义了一个 showParent() 方法,该方法使用 super.show() 调用了父类的 show() 方法,这样,即使子类重写了该方法,我们仍然可以在子类中访问父类的原始实现。

案例3:访问父类变量,这个案例帮助我们理解了如何在子类中区分和访问父类与子类的同名变量。

// 父类  
class Parent {  
    int number = 10;  
}  
  
// 子类  
class Child extends Parent {  
    int number = 20; // 子类中有一个与父类同名的变量number  
  
    void printNumber() {  
        System.out.println("Parent's number: " + super.number); // 使用super关键字访问父类的number变量  
        System.out.println("Child's number: " + number); // 访问子类的number变量  
    }  
}  
  
// 测试类  
public class SuperExample {  
    public static void main(String[] args) {  
        Child child = new Child(); // 创建Child对象  
        child.printNumber(); // 调用printNumber()方法,输出父类和子类的number变量的值  
    }  
}

最后一行输出:

Parent's number: 10  
Child's number: 20

这个修正版的案例3演示了如何在子类中通过super关键字访问被遮蔽(shadowed)的父类变量,在printNumber()方法中,我们首先使用super.number访问父类的number变量,然后直接使用number访问子类的number变量。最后一行输出了父类和子类中number变量的值,分别是10和20。

核心思考

【Java核心基础】一文带你了解Java中super关键字的重要作用_第4张图片

“super”关键字在编程中用于访问父类元素,包括属性、方法和构造函数。当子类中存在与父类同名的成员时,“super”确保我们访问的是父类成员。同时,在子类构建过程中,可以使用“super()”调用父类的初始化操作。此外,“super”还能代表当前对象的父类实例,使我们能够方便地调用父类方法或访问其属性。

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