Skip to content

抽象类不能被实例化

dart
abstract class Person {
  String name;
  Person(this.name);

  void hello();
}

var p = Person(); // IDE报错

抽象类的使用方式

  • extends继承
dart
abstract class Person {
  String name;
  Person(this.name);

  void hello();
}

class Teacher extends Person {
  Teacher(super.name);

  @override
  void hello() {
    print('hello $name');
  }
}

var p = Teacher('jandan');
p.hello();
  • implements实现
dart
abstract class Person {
  String name;
  Person(this.name);

  void hello();
}

class Teacher implements Person {
  @override
  String name;
  Teacher(this.name);

  @override
  void hello() {
    print('hello $name');
  }
}

var p = Teacher('jandan');
p.hello();

对比可以发现,implements必须把抽象父类中的所有抽象成员全部重写,而extends可以只重写抽象方法,抽象属性可以在子类构造函数中通过super调用抽象父类而省去重写

MIT License