Dart

【Dart】abstractクラスについて解説

 

そもそもabstractクラスではなにができるのか?

具象クラスによって拡張(または実装)される抽象クラスを作成できる。

抽象クラスには抽象メソッド(本体は空)を含めることができます。

 

抽象クラスを継承するクラスは定義されているメソッドを必ず実装しないといけない。

 

例を交えて解説

 

Animalクラスを用いる

Animalクラスにはeat関数がある。

abstract class Animal {
  void eat();
}

 

Animalクラスを継承したDogクラスを作成する

class Dog extends Animal {
  @override
  void eat() {
    print('Dog is eating');
  }

  void sleep() {
    print('Dog is sleeping');
  }
}

eat関数はAnimalクラスにあるので必ず入れないといけない。

そのため、@override を用いてAnimalクラスにあるeat関数を上書きする形で実行される

sleep関数は親クラスに抽象化されていないため、オーバーライドしなくてもいい。

 

仮にeat関数を実装しないとどうなるのか?

class Dog extends Animal {
  void sleep() {
    print('Dog is sleeping');
  }
}

結果:エラーになる。

エラー文は以下。

Missing concrete implementation of 'Animal.eat'.
Try implementing the missing method, or make the class abstract.

和訳:Animal.eatの具体的な実装がありません。不足しているメソッド(今回はoverrideさせたeat関数のこと)を実装するか、クラスを抽象化して

解釈:継承しているクラス(Animalクラス)abstractクラスで定義されているにもかかわらず、実装していないため、エラーになっているってことを言っている。

 

-Dart