0Pricing
JavaScript Academy · レッスン

継承、super、コンポジションを優先する場面

extendsで基底クラスを拡張し、コンストラクターでsuperを呼び、安全にメソッドをオーバーライドします。シンプルなコンポジションが適する場面も学びます。

「継承、super、コンポジションを優先する場面」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全3レッスンが含まれています。

全体像

目標:混乱せずに基本的な継承を使います。

  • extendsで子クラスを作ります
  • super(...)で親のコンストラクターを呼び出します
  • メソッドをオーバーライドし、必要に応じてsuper.method()を呼び出します
  • 「is-a」でない場合はcompositionを優先します
継承、super、コンポジションを優先する場面 — イラスト1

extendsとsuper

extendsで子クラスを作ります。super(name)を呼び出すと、親のコンストラクターが実行され、thisが設定されます。

// Base class with a small field and method
class Animal {
  constructor(name) {
    this.name = name;
  }
  info() {
    return "Animal:" + this.name;
  }
}

// Child class extends the base and calls super(...)
class Dog extends Animal {
  constructor(name, breed) {
    // must call super() before using this
    super(name);
    this.breed = breed;
  }
  speak() {
    return "woof";
  }
}

const d = new Dog("Milo", "Beagle");
console.log(d.info(), d.speak());
継承、super、コンポジションを優先する場面 — イラスト2

メソッドのオーバーライド

オーバーライドするときは、super.method()を呼び出して基底クラスのロジックを再利用し、その後で変更を加えられます。

// Override a method; keep parent behavior with super.method()
class Button {
  click() {
    return "base-click";
  }
}

class IconButton extends Button {
  click() {
    // call parent behavior, then add something
    const base = super.click();
    return base + "+icon";
  }
}

const b = new IconButton();
console.log(b.click()); // "base-click+icon"
継承、super、コンポジションを優先する場面 — イラスト3

has-aならcompositionを優先する

関係がhas-a(ヘルパーを使う)である場合は、クラスをシンプルに保つため、継承よりもcompositionを優先します。

// Composition: use a helper object instead of extending
class Logger {
  log(msg) {
    console.log("[log]", msg);
  }
}

class Player {
  constructor(name, logger) {
    this.name = name;
    this.logger = logger; // has-a logger
  }
  score(points) {
    this.logger.log(this.name + " +" + points);
  }
}

const logger = new Logger();
const p = new Player("Ayla", logger);
p.score(5);
継承、super、コンポジションを優先する場面 — イラスト4

is-aとhas-a

継承はis-aの関係を表します。Dog is an Animalという関係です。has-aのヘルパーにはcompositionを使います。

// Use instanceof for a quick is-a check
console.log("Dog is Animal?", d instanceof Animal);
console.log("Player is Animal?", p instanceof Animal);
継承、super、コンポジションを優先する場面 — イラスト5

初心者向けの習慣

ヒント:

  • 初心者向けには、継承階層を浅く保ちます。
  • サブクラスのコンストラクターでは、最初にsuper(...)を呼び出します。
  • 必要なものだけをオーバーライドし、super.method()で再利用します。
  • ユーティリティや横断的な機能にはcompositionを優先します。
継承、super、コンポジションを優先する場面 — イラスト6

super(...)の基礎クイズ

クイックチェック:サブクラスのコンストラクター内でsuperを使います。

継承、super、コンポジションを優先する場面 — イラスト7

まとめ

まとめ:本当のis-a関係にはextendsを使い、早い段階でsuper(...)を呼び出します。慎重にオーバーライドし、役立つ場合はsuper.method()を呼び出します。ヘルパーにはcompositionを優先します。

継承、super、コンポジションを優先する場面 — イラスト8

よくある質問

「継承、super、コンポジションを優先する場面」レッスンは無料ですか?

はい。「継承、super、コンポジションを優先する場面」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全3レッスンが含まれています。

「継承、super、コンポジションを優先する場面」で何を学びますか?

extendsで基底クラスを拡張し、コンストラクターでsuperを呼び、安全にメソッドをオーバーライドします。シンプルなコンポジションが適する場面も学びます。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

JavaScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。

「継承、super、コンポジションを優先する場面」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJavaScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. クラスフィールド、privateな#フィールド、staticメンバー
  2. 継承、super、コンポジションを優先する場面
  3. Mixin(体験) — 深い階層なしで簡単に再利用
← JavaScript Academyに戻る