extendsの概要
| クラスの継承 JavaScript予約語 | ||
|
extends 概要 わかりやすく説明 |
||
|
extendsの基本的な使い方
以下は、extendsを使用してクラスを継承する基本的な例です。
// 基本的な継承の例
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} が鳴いています。`);
}
}
class Dog extends Animal {
speak() {
console.log(`${this.name} がワンワンと鳴いています。`);
}
}
// 使用例
const dog = new Dog("ポチ");
dog.speak(); // ポチ がワンワンと鳴いています。
extendsを使用して、子クラスDogが親クラスAnimalを継承します。- 親クラスの
nameプロパティをそのまま利用できます。 - 子クラスで
speakメソッドをオーバーライドしています。
superを使用した親クラスの呼び出し
子クラスから親クラスのコンストラクタやメソッドを呼び出す際にsuperを使用します。
// superの使用例
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} が鳴いています。`);
}
}
class Cat extends Animal {
constructor(name, color) {
super(name); // 親クラスのコンストラクタを呼び出す
this.color = color;
}
speak() {
super.speak(); // 親クラスのメソッドを呼び出す
console.log(`${this.name} がニャーニャーと鳴いています。`);
}
}
// 使用例
const cat = new Cat("ミケ", "白");
cat.speak();
// ミケ が鳴いています。
// ミケ がニャーニャーと鳴いています。
superを使うことで、親クラスのコンストラクタやメソッドを再利用できます。- 子クラスでの拡張に親クラスの処理を組み込むことができます。
複雑な継承の応用例
以下の例では、複数の子クラスが親クラスを継承して、それぞれ異なる振る舞いを持っています。
// 複数のクラスを継承する例
class Animal {
constructor(name) {
this.name = name;
}
move() {
console.log(`${this.name} が動いています。`);
}
}
class Bird extends Animal {
move() {
console.log(`${this.name} が空を飛んでいます。`);
}
}
class Fish extends Animal {
move() {
console.log(`${this.name} が水中を泳いでいます。`);
}
}
// 使用例
const sparrow = new Bird("スズメ");
const goldfish = new Fish("金魚");
sparrow.move(); // スズメ が空を飛んでいます。
goldfish.move(); // 金魚 が水中を泳いでいます。
- それぞれの子クラスが独自の
moveメソッドを定義しています。 - 親クラスのコードを再利用しつつ、異なる動作を実現できます。
注意点
- 単一継承: JavaScriptは単一継承のみをサポートしており、1つのクラスしか継承できません。
- メソッドのオーバーライド: 子クラスで同じ名前のメソッドを定義すると、親クラスのメソッドが上書きされます。
superを使用して親クラスのメソッドを明示的に呼び出すことができます。 - メモリ管理: 親クラスのプロパティを
superで適切に初期化しないと、予期しない動作が起こることがあります。
よくある質問
- Q: JavaScriptは多重継承をサポートしていますか?
- A: JavaScriptは多重継承を直接サポートしていません。ただし、ミックスインを使うことで似たような機能を実現できます。
- Q:
superを使用しないとどうなりますか? - A: 子クラスのコンストラクタで
superを呼び出さないとエラーになります。親クラスのコンストラクタを正しく初期化するために必須です。 - Q: クラスの継承はいつ使うべきですか?
- A: クラスの継承は、複数のクラスが共通の振る舞いを持つ場合に使用すると、コードの再利用性が向上します。
まとめ
extendsは、JavaScriptでクラスの継承を実現するための重要なキーワードです。オブジェクト指向プログラミングの基盤となり、コードの再利用性や保守性を向上させます。
- 親クラスのプロパティやメソッドを引き継ぎつつ、子クラスで独自の機能を追加できます。
superを使用して親クラスのコンストラクタやメソッドを呼び出すことが可能です。- 単一継承の特性を理解し、適切に設計しましょう。