在Java编程中,super
关键字是一个非常重要的概念,它主要用于引用父类的属性和方法。通过使用 super
,我们可以在子类中访问和使用父类的成员变量和方法,尤其是在子类中对这些成员进行重写(Overriding)的情况下,super
关键字显得尤为重要。
super
关键字的基本用法
- 访问父类的属性:
当子类中定义了与父类同名的属性时,子类的属性会隐藏父类的同名属性。这时,我们可以使用
super
来引用父类的属性。
class Parent {
String name = "Parent Name";
}
class Child extends Parent {
String name = "Child Name";
void displayName() {
System.out.println("子类名称: " + name); // 输出子类的名称
System.out.println("父类名称: " + super.name); // 使用super访问父类的名称
}
}
public class TestSuper {
public static void main(String[] args) {
Child child = new Child();
child.displayName();
}
}
输出:
子类名称: Child Name
父类名称: Parent Name
在上面的例子中,Child
类中定义了一个与 Parent
类同名的变量 name
。通过 super.name
,我们能够访问父类 Parent
的 name
属性。
- 访问父类的方法:
当子类重写了父类的方法时,若希望在重写的方法中调用父类的版本,可以使用
super
关键字。
class Animal {
void makeSound() {
System.out.println("动物发出声音");
}
}
class Dog extends Animal {
void makeSound() {
System.out.println("狗叫");
}
void callSuperSound() {
super.makeSound(); // 调用父类的makeSound方法
}
}
public class TestSuperMethod {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // 输出 狗叫
dog.callSuperSound(); // 输出 动物发出声音
}
}
在这个例子中,Dog
类重写了 makeSound
方法,但我们通过 super.makeSound()
在 callSuperSound
方法中调用了父类 Animal
的 makeSound
方法。
- 调用父类的构造方法:
在子类的构造方法中,可以使用
super()
来调用父类的构造方法。这个调用必须是构造方法中的第一条语句。
class Person {
String name;
Person(String name) {
this.name = name;
}
}
class Student extends Person {
int studentId;
Student(String name, int studentId) {
super(name); // 调用父类的构造方法
this.studentId = studentId;
}
void display() {
System.out.println("姓名: " + name + ", 学生ID: " + studentId);
}
}
public class TestSuperConstructor {
public static void main(String[] args) {
Student student = new Student("张三", 1001);
student.display(); // 输出 姓名: 张三, 学生ID: 1001
}
}
在上述代码中,Student
类的构造方法通过 super(name)
调用了父类 Person
的构造方法,从而正确初始化了 name
属性。
总结
super
关键字在Java中主要用于访问父类的字段和方法,确保在子类有与父类同名的成员时候,能够正确引用到父类的成员。此外,它还可以用于调用父类的构造方法。通过合理使用 super
关键字,可以灵活地实现面向对象编程中的继承关系,增强代码的可读性和可维护性。