在 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.
中是最终的
我创建了一个带有 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.
中是最终的