在 Java 编程中,super
关键字是一个非常重要的概念,它主要用于在子类中引用父类的成员(属性和方法)。下面我们将详细介绍super
在 Java 中的使用方法。
一、super 关键字的基本用法
- 调用父类的构造函数
在子类的构造函数中,可以使用
super
关键字来调用父类的构造函数。这通常用于子类需要在自己的构造函数中初始化一些继承自父类的属性。例如:
class Parent {
public Parent() {
System.out.println("父类构造函数");
}
}
class Child extends Parent {
public Child() {
super(); // 调用父类的无参构造函数
System.out.println("子类构造函数");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
}
}
在上述代码中,Child
类的构造函数中使用了super()
来调用父类Parent
的无参构造函数。这样,在创建Child
对象时,会先执行父类的构造函数,然后再执行子类的构造函数。
- 访问父类的成员变量
如果子类和父类中有同名的成员变量,在子类中可以使用
super
关键字来访问父类的成员变量。例如:
class Parent {
public int num = 10;
}
class Child extends Parent {
public int num = 20;
public void printNum() {
System.out.println("子类中的 num:" + num);
System.out.println("父类中的 num:" + super.num);
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.printNum();
}
}
在上述代码中,Child
类中有一个与父类Parent
同名的成员变量num
。在Child
类的printNum
方法中,通过super.num
访问了父类的num
变量。
- 调用父类的成员方法
当子类重写了父类的方法后,如果需要在子类的方法中调用父类被重写的方法,可以使用
super
关键字。例如:
class Parent {
public void show() {
System.out.println("父类的 show 方法");
}
}
class Child extends Parent {
@Override
public void show() {
super.show(); // 调用父类的 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
关键字必须出现在子类的方法或构造函数中,并且只能用于访问父类的成员。- 如果子类的构造函数没有显式地调用父类的构造函数,那么 Java 编译器会默认调用父类的无参构造函数。如果父类没有无参构造函数,而子类的构造函数又没有显式地调用父类的其他构造函数,就会导致编译错误。
super
关键字和this
关键字不能同时在子类的构造函数中使用,因为它们都用于调用父类的构造函数,只能选择其中一个。
总之,super
关键字在 Java 中是一个非常有用的工具,它允许子类访问父类的成员,实现代码的复用和扩展。在使用super
关键字时,需要注意其用法和注意事项,以避免出现错误。通过合理使用super
关键字,可以使代码更加清晰、易读和维护。