【如果父类没有默认构造方法(无参构造方法),则需要在初始化列表中调用父类构造方法进行初始化】

来源:5-7 带你揭开Flutter中的面向对象(标准构造方法、初始化列表)

qq_挂失的青春_0

2019-08-05

请问这个应该怎么理解?有点小疑惑

  1. 【如果父类没有默认构造方法(无参构造方法),则需要在初始化列表中调用父类构造方法进行初始化】是什么意思?父类怎么会没有默认构造方法呢?
  2. 怎么在初始化列表中调用父类构造方法进行初始化呢?
写回答

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);

}

```

6
0

Flutter从入门到进阶 实战携程网App 一网打尽核心技术

解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。

4788 学习 · 3270 问题

查看课程