“super”关键字在编程中扮演着重要角色,它允许我们直接访问父类中的属性、方法或构造函数,即使子类中存在同名元素。此外,“super()”在子类构造函数中调用父类初始化操作,确保父类属性正确初始化。有时,“super”还可代表当前对象的父类实例,使我们能像操作父类实例一样调用其方法或访问属性。
super
关键字是Java中提供了一种机制,它使得子类可以方便地访问和操作其父类的成员,它是面向对象编程中继承概念的一个重要组成部分,有助于实现代码的重用和多态性,super关键字有如下特点:
super()
可以在子类的构造方法中调用父类的构造方法,这通常用于初始化父类中定义的实例变量。super
关键字来引用父类的成员变量。super
关键字来调用父类中被覆盖的方法。super
可以作为一个引用变量来使用,它引用了当前对象的父类类型。“super”关键字在编程中非常有用,它允许我们直接访问父类中的属性、方法或构造函数,确保我们访问的是父类中的成员而不是子类中的,在子类构建过程中,可以使用“super()”调用父类的初始化操作,此外,“super”还能代表当前对象的父类实例,使我们可以方便地调用父类的方法或访问其属性。
下面列举了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
对象时,我们需要为 Parent
和 Child
都提供必要的信息,通过在 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。
“super”关键字在编程中用于访问父类元素,包括属性、方法和构造函数。当子类中存在与父类同名的成员时,“super”确保我们访问的是父类成员。同时,在子类构建过程中,可以使用“super()”调用父类的初始化操作。此外,“super”还能代表当前对象的父类实例,使我们能够方便地调用父类方法或访问其属性。