Dart中的常量构造函数

时间:2020-11-11 01:30:21

标签: oop dart

疑问是:

在子类中定义常量构造函数时,上层类的默认构造函数必须是常量。

但是,当上层类的默认构造函数定义为常量时,则不必将继承类的构造函数设为常量。

以下代码举例说明了这种情况:

// Default constructor of the subclass defined as constant:

class Super_class {
  Super_class();
}

class Sub_class extends Super_class {
  const Sub_class() : super();
}

// Default constructor of the upper class defined as constant:

class Super_class {
  const Super_class();
}

class Sub_class extends Super_class {
  Sub_class() : super();
}

有人可以向我解释这是如何工作的吗?

2 个答案:

答案 0 :(得分:0)

构造函数不被继承。 const基类构造函数对其派生类没有任何const要求。

const构造函数意味着该对象必须在const上下文中是可构造的。一种思考的方法是对象在编译时必须是可构造的。它不依赖于任何运行时值。因此,const构造函数只能 依赖其他const事物,包括基类构造函数。

答案 1 :(得分:0)

如果子类具有const构造函数,则必须调用超类const构造函数,否则它将无法对整个构造执行编译时常量评估。 const超类构造函数不需要是未命名的(有时会错误地命名为“ default”)构造函数。超类只需要具有可以调用的 some 常量生成器即可。 示例:

class SuperClass {
  final int foo;
  factory SuperClass() => const SuperClass._(0);
  const SuperClass._(this.foo);
}
class Subclass {
  final int bar;
  const SubClass(int foo, this.bar) : super._(foo);
}

即使超类有子类,也不必具有const构造函数。超类自身可以具有非恒定构造函数,也可以具有恒定构造函数。