【如果父类没有默认构造方法(无参构造方法),则需要在初始化列表中调用父类构造方法进行初始化】
来源:5-7 带你揭开Flutter中的面向对象(标准构造方法、初始化列表)
qq_挂失的青春_0
2019-08-05
请问这个应该怎么理解?有点小疑惑
- 【如果父类没有默认构造方法(无参构造方法),则需要在初始化列表中调用父类构造方法进行初始化】是什么意思?父类怎么会没有默认构造方法呢?
- 怎么在初始化列表中调用父类构造方法进行初始化呢?
1回答
-
newming
2019-08-05
1. 首先明确一点,一个类肯定都会有自己的构造方法,如果你创建的时候没有添加构造方法,那么会有一个隐形的构造方法,代码如下:
```dart
class Person {
// 这里啥都不写,其实可以认为有一个无参操作的构造方法
// Person () {};
}
```
2. 父类没有默认构造方法(无参数构造方法),其实就是说你已经在父类中添加了自己的构造函数,并且还带有参数
3. 当子类继承父类的时候,一定会去执行父类的构造函数,所以这个时候就看你的父类的构造函数有没有参数了,如果没有参数(即便是你自己重新写的),你其实不需要调用父类的构造方法来初始化。如果有参数,那就必须调用了,因为会执行父类的构造方法,缺少参数的话会有问题。所以主要看父类的构造方法有无参数
```dart
// 父类构造方法无参,不需要初始化
class Person {
Person() {
print("Person constructor");
}
}
class Student extends Person {
int age;
}
```
```dart
// 父类构造方法有参,需要初始化
class Person {
Person(this.name) {
print("Person constructor");
}
}
class Student extends Person {
int age;
// 通过 : 分隔,super代表父类
Student(String name) : super(name);
}
```
60
相似问题