providing default implementation for method in abstract class

dart

Solution

You have to make `B` extend `A` instead of implement.

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
}

Alternatively if you don't want to use extends because your class may already extend an other class, you can use 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
}

Problem

In the example below I was hoping sum getter would return 8, but it is a compile error. ``` Class 'B' has no instance getter 'sum'. ``` According to the spec: Using an abstract class instead of an interface has important advantages. An abstract class can provide default implementations; it can also provide static methods, obviating the need for service classes such as Collections or Lists, whose entire purpose is to group utilities related to a given type. What is the correct way to provide a default implementation of sum that adds x and 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? } ```

Original source