extendsを使ったクラスの継承とオブジェクト指向プログラミングの活用をわかりやすく解説

スポンサーリンク
スポンサーリンク

extendsの概要

クラスの継承 JavaScript予約語

extends

概要 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を使用して親クラスのコンストラクタやメソッドを呼び出すことが可能です。
  • 単一継承の特性を理解し、適切に設計しましょう。