📜  Dart的超级构造函数(1)

📅  最后修改于: 2023-12-03 15:30:22.493000             🧑  作者: Mango

Dart的超级构造函数

在Dart中,构造函数是一种特殊的函数,它在创建类的新对象时被调用。Dart还引入了超级构造函数的概念,使构造函数的继承更加灵活。

什么是超级构造函数?

超级构造函数是一个类的构造函数,它可以调用它的父类的构造函数。在Dart中,使用super关键字来调用父类的构造函数。下面是一个示例:

class Person {
  String name;

  Person(this.name);
}

class Employee extends Person {
  String job;

  Employee(String name, this.job) : super(name);
}

在上面的例子中,Employee类继承了Person类,并调用了它的构造函数。通过调用super(name)Employee类可以使用Person类的构造函数来初始化name属性。

超级构造函数具有以下特点:

  • 调用父类的构造函数
  • 可以在初始化自己的属性之前或之后调用
  • 如果没有显式指定超级构造函数,则默认调用父类的无参构造函数
如何使用超级构造函数?

使用超级构造函数非常简单,只需要在子类的构造函数中使用super关键字来调用父类的构造函数。

如果父类的构造函数有参数,则需要提供与参数类型和顺序相同的参数。

class Person {
  String name;

  Person(this.name);
}

class Employee extends Person {
  String job;

  Employee(String name, this.job) : super(name);
}

如果父类的构造函数有多个构造函数,可以使用super.的形式来调用特定的父类构造函数。

class Person {
  String name;
  
  Person(this.name);
  
  Person.fromJson(Map<String, dynamic> json) {
    name = json['name'];
  }
}

class Employee extends Person {
  String job;

  Employee.fromJson(Map<String, dynamic> json)
      : job = json['job'],
        super.fromJson(json);
}

在上面的例子中,Employee类使用super.fromJson(json)来调用Person类的特定构造函数,而不是默认的构造函数。

总结

超级构造函数使得Dart的构造函数更加灵活和强大。在继承中,使用super关键字来调用父类的特定构造函数,可以方便地初始化父类的属性,从而节省时间和精力。