Dmi*_*pka 6 abstract-class interface dart
情况如下:
abstract class A {
void doSomething() => print('Do something..');
}
class B implements A {
@override
void doSomething() => print('Do something already..');
}
class C extends A {
}
Run Code Online (Sandbox Code Playgroud)
我有一个抽象类A.B类实现A.因此它覆盖了doSomething()方法.C类延伸A.
一切正常,直到我将工厂构造函数添加到A类:
abstract class A {
factory A() => new B();
void doSomething() => print('Do something..');
}
Run Code Online (Sandbox Code Playgroud)
这导致我的IDE(IntelliJ IDEA)出错:
预期的生成构造函数,但工厂发现
我的第一个想法是为C类创建构造函数,我将其称为工厂构造函数.是否可以这样做?
当我尝试扩展Exception类时,我遇到了同样的问题.它还有一个工厂构造函数:
abstract class Exception {
factory Exception([var message]) => new _ExceptionImplementation(message);
}
Run Code Online (Sandbox Code Playgroud)
这就是为什么要创建我的自定义异常我必须实现Exception类而不是扩展它,它真的让我困惑.
我还想澄清一个术语问题.我可以说从B类的角度来看,A是一个接口,所以B正在实现接口A.但是,从C类的角度来看,A是一个抽象类,所以C是扩展抽象类A.这些语句正确?
谢谢.
梅德.
Gün*_*uer 14
如果类没有构造函数,则隐式添加生成构造函数。如果类具有显式构造函数,则不会添加生成构造函数。你有两个选择。
abstract class A {
void doSomething() => print('Do something..');
factory A.name() => new B();
A();
}
Run Code Online (Sandbox Code Playgroud)
abstract class A {
void doSomething() => print('Do something..');
factory A() => new B();
A.protected();
}
class C extends A {
C() : super.protected();
}
Run Code Online (Sandbox Code Playgroud)
试试DartPad
你的说法是对的。如果你实现一个类,它充当接口,如果你扩展它,它充当基类。
| 归档时间: |
|
| 查看次数: |
1506 次 |
| 最近记录: |