在 Dart 中扩展抽象 class 是否为 subclass 提供另一个构造函数

Does extending an abstract class in Dart give the subclass another constructor

我创建了一个带有 final 变量的抽象 class,因此我需要在其中创建一个构造函数来实例化变量。是否会将此构造函数添加到所有扩展抽象 class 的 class 中?我不这么认为,因为我的一些 subclasses 将有额外的最终变量需要实例化。如果是这种情况,抽象 class' 构造函数扮演什么角色?

供参考:

abstract class SuperClass {
  final String item
  SuperClass(item)
  : item = item;
}

class SubClass { 
  final String item
  final String item2
  SubClass(item, item2)
  : item = item,
  item2 = item2;
}

在这种情况下,扩展是最佳选择吗?如果是,是否可以看到超级 class' 构造函数?

您的摘要 class 只是一个普通的 class,因为它没有任何摘要 properties/methods。您唯一不能做的就是创建该抽象的实例 class。 扩展 SuperClass 是有意义的,因为您将不再需要定义在 super class 中声明的字段,例如“item”字段。

为了从中受益,您需要编写您的子class略有不同:

abstract class SuperClass {
  final String item;
  SuperClass(this.item);
}

class SubClass extends SuperClass {
  final String item2;
  SubClass(String item, this.item2) : super(item);
}

请注意,subclass 构造函数调用 superclass' 构造函数并将项目值传递给它。不过,您仍然必须在 subclass' 构造函数中声明项目值;否则,您将没有机会初始化它,这是必需的,因为它在 superclass.

中是最终的