情况如下:
abstract class A {
void doSomething() => print('Do something..');
}
class B implements A {
@override
void doSomething() => print('Do something already..');
}
class C extends A {
}
我有一个抽象类A. B类实现A.因此它会覆盖doSomething()方法。 C类扩展A。
一切正常,直到我将工厂构造函数添加到A类:
abstract class A {
factory A() => new B();
void doSomething() => print('Do something..');
}
这会导致我的IDE(IntelliJ IDEA)出错:
预期的生成构造函数,但工厂找到了
我的第一个想法是为C类创建构造函数,我将其称为A的工厂构造函数。是否可以这样做?
当我尝试扩展Exception类时遇到了同样的问题。它还有一个工厂构造函数:
abstract class Exception {
factory Exception([var message]) => new _ExceptionImplementation(message);
}
这就是为什么要创建我的自定义异常我必须实现Exception类而不是扩展它,它真的让我感到困惑。
我还想澄清一个术语问题。 我可以说从B类的角度来看,A是一个接口,所以B正在实现接口A. 但是,从C类的角度来看,A是一个抽象类,所以C是扩展抽象类A.这些语句是否正确?
谢谢。
梅德。
答案 0 :(得分:4)
如果类没有构造函数,则隐式添加生成构造函数。如果类具有显式构造函数,则不添加生成构造函数。 你有两个选择。
abstract class A {
void doSomething() => print('Do something..');
factory A.name() => new B();
A();
}
abstract class A {
void doSomething() => print('Do something..');
factory A() => new B();
A.protected();
}
class C extends A {
C() : super.protected();
}
尝试DartPad
你的陈述是对的。如果你实现了一个类,它就充当了一个接口,如果你扩展它,它就作为一个基类。