繁体   English   中英

在 Dart 中扩展抽象类是否会给子类另一个构造函数

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

我创建了一个带有最终变量的抽象类,因为我需要在其中创建一个构造函数来实例化变量。 这个构造函数会被添加到所有扩展抽象类的类中吗? 我不这么认为,因为我的一些子类将有额外的最终变量需要实例化。 如果是这种情况,抽象类的构造函数起什么作用?

以供参考:

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

在这种情况下是否扩展最佳选择,如果是,是否会看到超类的构造函数?

您的情况下的抽象类只是一个普通类,因为它没有任何抽象属性/方法。 您唯一不能做的就是创建该抽象类的实例。 扩展 SuperClass 是有意义的,因为您将不再需要定义在超类中声明的字段,如“item”字段。

为了从中受益,您需要编写稍微不同的子类:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM