为抽象类中的方法提供默认实现

时间:2013-07-22 13:54:47

标签: dart

在下面的示例中,我希望 sum getter将返回8,但这是编译错误。

Class 'B' has no instance getter 'sum'.

根据规范:

  

使用抽象类而不是接口很重要   好处。抽象类可以提供默认实现;它   还可以提供静态方法,不需要服务   集合或列表等类,其目的是分组   与给定类型相关的实用程序。

提供添加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?
}

1 个答案:

答案 0 :(得分:4)

您必须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
}

或者,如果您不想使用 extends ,因为您的课程可能已经扩展了其他课程,您可以使用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
}
相关问题