Subterranean Flower

DartのImplicit interface(暗黙的インターフェイス)について

Author
古都こと
ふよんとえんよぷよぐやま!!!

DartにはImplicit Interface(暗黙的インターフェイス)というものが存在します。名前の通り、Dartではすべてのクラスは暗黙的にインターフェイスを持ち、それを公開しています。例えば以下の様なクラスがあるとしましょう。

class Person {
  final String firstName;
  final String familyName;
  
  Person(this.firstName, this.familyName);
}

一見ただのクラスですが、暗黙的インターフェイスがあるため、インターフェイスは一般に公開されています。したがって、このクラスのインターフェイスを、他のクラスに実装することが可能です。

// 全てのクラスは暗黙的インターフェイスを持つ
class Person {
  final String firstName;
  final String familyName;

  Person(this.firstName, this.familyName);
}

// Personクラスの暗黙的インターフェイスを実装する
class GreetablePerson implements Person {
  final String firstName;
  final String familyName;

  GreetablePerson(this.firstName, this.familyName);

  void greet() => print("Hi.");
}

暗黙的インターフェイスはユニットテストなどにも活用でき大変便利ですが、非公開にする方法はありません。このため明示的にインターフェイスを宣言するintefercafeキーワードは存在しません(かつては存在しましたが、抽象クラスで代用できるため削除されました)。あらゆるクラスのインターフェイスは常に公開されているという意識を持った設計を心がけましょう。