继承中的构造函数及其调用顺序示例
时间: 2024-10-24 10:12:53 浏览: 32
在面向对象编程中,继承允许一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法。当创建子类的对象时,如果父类中有构造函数(即初始化方法),子类会自动调用父类的构造函数,这个过程称为构造函数的隐式调用。
构造函数的调用顺序通常是这样的:
1. **首先**,如果子类有自身的构造函数(即使它很简单,如`super()`),那么会先调用子类的构造函数。
2. **接着**,无论子类是否覆盖了父类的构造函数,都会调用父类的构造函数。这是通过`super()`关键字完成的,即使子类没有显式地调用它,编译器会默认添加这行代码。
3. **最后**,子类的其他成员变量初始化和代码块执行。
例如,考虑以下Java代码:
```java
class Animal {
String name;
// 父类构造函数
public Animal(String n) {
this.name = n;
System.out.println("Animal constructor called with " + n);
}
}
class Dog extends Animal {
int age;
// 子类构造函数
public Dog(String n, int a) {
super(n); // 调用父类构造函数
this.age = a;
System.out.println("Dog constructor called with " + n + " and " + a);
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog("Buddy", 5);
}
}
```
运行上述代码,输出将是:
```
Animal constructor called with Buddy
Dog constructor called with Buddy and 5
```
这里展示了父类构造函数在子类构造函数内部被调用的情况。
阅读全文