在下面的示例中,我希望sum getter将返回8,但这是一个编译错误。
Class 'B' has no instance getter 'sum'.
Run Code Online (Sandbox Code Playgroud)
根据规格:
使用抽象类而不是接口具有重要的优势。抽象类可以提供默认的实现。它还可以提供静态方法,从而消除了对服务类(如集合或列表)的需要,它们的全部目的是对与给定类型相关的实用程序进行分组。
提供加和x和y的和的默认实现的正确方法是什么?
abstract class A {
int get x;
int get y;
int get sum => x+y;
}
class B implements A {
int get x => 3;
int get y => 5;
}
main() {
B b = new B();
print(b.x);
print(b.sum); // Not working, why not 8?
}
Run Code Online (Sandbox Code Playgroud)
您必须进行B
扩展 A
而不是实现。
abstract class A {
int get x;
int get y;
int get sum => x+y;
}
class B extends A {
int get x => 3;
int get y => 5;
}
main() {
B b = new B();
print(b.x);
print(b.sum); // displays 8
}
Run Code Online (Sandbox Code Playgroud)
另外,如果由于类可能已经扩展了另一个类而不想使用扩展,则可以使用mixins:
abstract class M {
int get x;
int get y;
int get sum => x+y;
}
class A {
String s = "s";
}
class B extends A with M {
int get x => 3;
int get y => 5;
}
main() {
B b = new B();
print(b.s);
print(b.x);
print(b.sum); // displays 8
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
946 次 |
最近记录: |