Dev Study
← 解説「クラスの継承 extends」に戻る

サンプルコードで身につける: クラスの継承 extends

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1継承の最小形 — 全部引き継ぐ

extends と書くだけで、子クラスは親クラスのプロパティとメソッドをすべて引き継ぎます。Dog には何も書いていないのに、親の cry() がそのまま呼べることを確認してください。instanceof が示すとおり、Dog のインスタンスは Animal のインスタンスでもあります。

TypeScript

2super() — 親のコンストラクタを呼ぶ

子クラスに独自のコンストラクタを書く場合は、先頭で super(...) を呼んで親の初期化を先に済ませるのが決まりです。super を呼ばない、または super より前に this に触るとコンパイルエラーになります。共通のプロパティは親に、追加のプロパティは子に、という分担が基本形です。

TypeScript

3オーバーライド — 親のメソッドを上書きする

親と同名のメソッドを子クラスに書くと、子の実装で上書き(オーバーライド)されます。super.メソッド名() で親の実装も呼び出せるので、「親の処理に一手間足す」拡張がきれいに書けます。ログの整形に時刻や接頭辞を足す、といった場面が実務の典型です。

TypeScript

4protected — 継承先にだけ内部を開く

private のプロパティは子クラスからも触れませんが、protected なら継承先からは触れます。親が管理する内部状態を、子クラスで追加したメソッドから直接操作したいときに使う、継承とセットで覚える修飾子です。外部から直接触れない点は private と同じです。

TypeScript

5基底Repositoryクラス — 共通機能を親にまとめる

保存や件数取得のような共通処理を基底クラスに実装し、データの種類ごとに違う処理だけを子クラスに書く、実務の定番パターンです。データ種別が増えても基底クラスを extends して差分を書くだけで済みます。protected にした rows を子クラスのメソッドが読んでいる点にも注目してください。

TypeScript