2012年3月4日日曜日

クラスとインターフェイス

このエントリーをはてなブックマークに追加
Dart はクラスベースのオブジェクト指向言語です。クラス、そしてインターフェイスという、他のオブジェクト指向言語と似た仕組みを持ちます。
  • クラスは他のひとつのクラスを拡張(extends)します。多重継承はできません。
  • クラスの定義で extends を省略したときは、Object を拡張することになります。
  • クラスは複数のインターフェイスを実装(implements)できます。
  • インターフェイスは複数のインターフェイスを拡張(extends)できます。
// 動物インターフェイス
interface Animal {
  void cry();
}

// 犬は動物を継承
class Dog implements Animal {
  void cry() { print("Bark!"); }
}

// 猫も動物を継承
class Cat implements Animal {
  void cry() { print("Mew!"); }
}

// ライオンはネコ科
class Lion extends Cat {
  void cry() { print("Roar!"); }
}

// 動物園で吠えます。
void zoo(Animal a) {
  a.cry();
}

main() {
  zoo(new Dog()); // Bark!
  zoo(new Cat()); // Mew!
  zoo(new Lion()); // Roar!
}
このあたりの仕組みはJavaとほぼ同じですので、Javaに慣れている人はとっつきやすいと思います。

他にも次のような特徴があります。
  • クラスは型変数を extends できません。(class A<T> extends T ということはできない)
  • インターフェイスはデフォルトのファクトリー・クラスを指定できます。
  • インターフェイスには定数の宣言を含むことができます。(static ABC = "ABC";
インターフェイスにデフォルトのファクトリー・クラスが指定できるのは面白い機能です。例としてリストを見てみましょう。DartのListは次のようにインターフェイスとして定義されています。
interface List extends Collection default ListFactory {
...
}
デフォルトのファクトリー・クラスは default キーワードに続けて指定します。

DartのListでは、デフォルトのファクトリー・クラスとして ListFactory クラスが指定されています。デフォルトのファクトリー・クラスが指定されているインターフェイスは、そのままインスタンスを生成することができます。サンプルコード
main() {
  List animals = new List();
  animals.add(new Dog());
  animals.add(new Cat());
  animals.add(new Lion());
  for (Animal a in animals) {
    a.cry();
  }
}


こちらもどうぞ

0 件のコメント:

コメントを投稿