- クラスは他のひとつのクラスを拡張(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";
)
interface Listデフォルトのファクトリー・クラスは default キーワードに続けて指定します。extends Collection default ListFactory { ... }
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 件のコメント:
コメントを投稿