详细解释Java中super关键字调用父类成员
时间: 2023-09-15 14:22:30 浏览: 133
在Java中,super关键字可以用于调用父类的构造函数、方法和属性,以实现子类对父类的扩展或修改。下面分别介绍在Java中如何使用super关键字调用父类的构造函数、方法和属性。
1. 调用父类的构造函数
在Java中,子类的构造函数可以通过super关键字调用父类的构造函数,以便在子类实例化时初始化父类的成员变量。子类的构造函数中必须在第一行调用父类的构造函数,否则编译器会默认在第一行插入super()语句。
例如,假设有一个父类Animal和一个子类Cat,它们分别有自己的构造函数,那么在子类Cat的构造函数中可以使用super关键字调用父类Animal的构造函数,例如:
```
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
}
public class Cat extends Animal {
private int age;
public Cat(String name, int age) {
super(name); // 调用父类Animal的构造函数
this.age = age;
}
}
```
在上面的例子中,子类Cat的构造函数中通过super(name)调用了父类Animal的构造函数,并传递了参数name,以便初始化父类的成员变量name。
2. 调用父类的方法
在Java中,子类可以通过super关键字调用父类的方法,以便实现子类对父类方法的扩展或修改。在子类中使用super调用父类方法时,需要指定要调用的方法名称,并且要与父类方法的定义保持一致。
例如,假设有一个父类Animal和一个子类Cat,它们都有自己的方法cry(),那么在子类Cat中可以使用super关键字调用父类Animal的cry()方法,并在此基础上进行扩展,例如:
```
public class Animal {
public void cry() {
System.out.println("Animal cry");
}
}
public class Cat extends Animal {
public void cry() {
super.cry(); // 调用父类Animal的cry()方法
System.out.println("Cat cry");
}
}
```
在上面的例子中,子类Cat的cry()方法中通过super.cry()调用了父类Animal的cry()方法,并在此基础上输出了"Cat cry"。
3. 调用父类的属性
在Java中,子类可以通过super关键字访问父类的属性,以便实现对父类属性的扩展或修改。在子类中使用super访问父类属性时,需要指定要访问的属性名称,并且要与父类属性的定义保持一致。
例如,假设有一个父类Animal和一个子类Cat,它们都有自己的属性name,那么在子类Cat中可以使用super关键字访问父类Animal的name属性,并在此基础上进行扩展或修改,例如:
```
public class Animal {
protected String name = "Animal";
public void printName() {
System.out.println(name);
}
}
public class Cat extends Animal {
protected String name = "Cat";
public void printName() {
super.printName(); // 调用父类Animal的printName()方法
System.out.println(name);
System.out.println(super.name); // 访问父类Animal的name属性
}
}
```
在上面的例子中,子类Cat的printName()方法中通过super.printName()调用了父类Animal的printName()方法,并在此基础上输出了"Cat"和"Animal"两个字符串,其中通过super.name访问了父类Animal的name属性。
阅读全文