Java 中的继承机制允许我们创建一个类(称为子类)来继承另一个类(称为父类)的属性和行为。在继承中,子类可以扩展父类的功能,同时还可以添加新的属性和方法。Java 提供了 `super` 关键字来实现父类对象的引用,从而可以调用父类的属性和方法。本文将详细介绍 Java 中 `super` 关键字的用法。
### 1. 调用父类构造方法
当创建子类的实例时,默认会调用父类的无参构造方法。如果父类没有无参构造方法,或者你希望显式地调用父类的带参构造方法,可以使用 `super` 关键字。
**示例 1:**
```java
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();
}
}
```
**输出:**
```
父类无参构造方法
子类无参构造方法
```
**示例 2:**
```java
class Parent {
public Parent(String name) {
System.out.println("父类带参构造方法,姓名:" + name);
}
}
class Child extends Parent {
public Child(String name) {
// 调用父类带参构造方法
super(name);
System.out.println("子类带参构造方法,姓名:" + name);
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child("张三");
}
}
```
**输出:**
```
父类带参构造方法,姓名:张三
子类带参构造方法,姓名:张三
```
### 2. 访问父类属性和方法
在子类中,如果有一个与父类同名的属性或方法,默认访问的是子类的。但如果你想访问父类的同名成员,可以使用 `super` 关键字。
**示例:**
```java
class Parent {
public String name = "父类名称";
public void show() {
System.out.println("父类 show 方法");
}
}
class Child extends Parent {
public String name = "子类名称";
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();
}
}
```
**输出:**
```
父类 show 方法
子类 show 方法
```
### 3. 在子类中覆盖父类方法
当子类重写父类的方法时,如果希望调用父类的方法,可以使用 `super` 关键字。
**示例:**
```java
class Parent {
public void show() {
System.out.println("父类 show 方法");
}
}
class Child extends Parent {
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();
}
}
```
**输出:**
```
父类 show 方法
子类 show 方法
```
### 4. super 与 this 的区别
- `super` 关键字用于引用父类,`this` 关键字用于引用当前对象。
- `super` 必须与继承相关,而 `this` 关键字不要求。
- 在构造方法中,`super()` 必须作为第一条语句,而 `this` 可以出现在任何位置。
### 5. 结语
`super` 关键字在 Java 继承机制中起着关键作用,它允许子类访问和操作父类的