🐡

Dart abstractClassを公式ドキュメントに基づいて調査する

2024/12/09に公開

やること

Abstract classを雰囲気で使っていたので、公式ドキュメントに基づいて調査する。
調べるの認識では抽象クラスに抽象メソッドを定義して、implimentsしてメソッドを実装するくらい。

仕様にフォーカスするため、最適な使い方や応用例には触れない。
今後の実務コードやOSSのコードを読んで探ろうと思う。

https://dart.dev/language/class-modifiers#abstract

To define a class that doesn't require a full, concrete implementation of its entire interface, use the abstract modifier.
インターフェイス全体の完全な具体的実装を必要としないクラスを定義するには、abstract修飾子を使用します。

Abstract classes cannot be constructed from any library, whether its own or an outside library.
抽象クラスは、独自のライブラリであろうと外部のライブラリであろうと、どのライブラリからも構築することはできません。

ここの「構築することはできません。」はインスタンス化できないことを指す。

Abstract classes often have abstract methods.
抽象クラスは多くの場合、抽象メソッドを持っています。

多くの場合、抽象メソッドを持っています。ということは普通のメソッドも定義できるはず?と思ったので書いたところ出来ました。


abstract class A {
  void test1() { // エラー無し
    print(123);
  }
  
  void test2();
}

If you want your abstract class to appear to be instantiable, define a factory constructor.
抽象クラスをインスタンス化できるように見せたい場合は、ファクトリー・コンストラクタを定義する。

その他参考記事

以下でクラス修飾子一覧が継承やコンストラクタなど出来ることがまとまっている。

https://dart.dev/language/modifier-reference

Discussion