継承、super、コンポジションを優先する場面
extendsで基底クラスを拡張し、コンストラクターでsuperを呼び、安全にメソッドをオーバーライドします。シンプルなコンポジションが適する場面も学びます。
「継承、super、コンポジションを優先する場面」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全3レッスンが含まれています。
全体像
目標:混乱せずに基本的な継承を使います。
- extendsで子クラスを作ります
- super(...)で親のコンストラクターを呼び出します
- メソッドをオーバーライドし、必要に応じてsuper.method()を呼び出します
- 「is-a」でない場合はcompositionを優先します

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.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"

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);

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(...)を呼び出します。
- 必要なものだけをオーバーライドし、super.method()で再利用します。
- ユーティリティや横断的な機能にはcompositionを優先します。

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

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

よくある質問
「継承、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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- クラスフィールド、privateな#フィールド、staticメンバー
- 継承、super、コンポジションを優先する場面
- Mixin(体験) — 深い階層なしで簡単に再利用