- クラスは他のひとつのクラスを拡張(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 件のコメント:
コメントを投稿