TypeScriptの継承とコンストラクタの理解を深める【初心者向け解説】

JavaScript

TypeScriptの継承について学んでいるけれども、どうしても理解できない部分があるという方に向けて、今回は実際のコードを使いながら「継承」の基本的な理解を深めていきます。特に「コンストラクタ」や「privateプロパティ」の扱いに焦点を当てて解説します。

1. 継承の基本

まず最初に、継承とはクラスが他のクラスのプロパティやメソッドを引き継ぐことを意味します。コード中での「class Dog extends Animal」という記述で、DogクラスがAnimalクラスを継承しています。

2. コード解説

ここでは2つのファイル、`Animal.ts` と `Dog.ts` を使っています。Animalクラスは名前を持ち、`makeSound` メソッドを使ってその名前を表示します。一方、DogクラスはAnimalクラスを継承し、`bark` メソッドを追加しています。

3. コンストラクタの役割と引数の取り扱い

質問者が気にしている「constructor(name: string) { this.name = name; }」について説明します。ここでの`this.name`は、`Animal`クラスの`name`プロパティを指しており、`Dog`クラスからアクセスできますが、注意点として`name`は`private`であるため、`Dog`クラス内から直接はアクセスできません。実際、`name`プロパティは`Animal`クラス内で管理されていますが、コンストラクタ内で`super(name)`を使って親クラスのコンストラクタを呼び出すことで、`name`を正しく設定できます。

4. `super`メソッドの使い方

`super(name)`を使うことによって、`Dog`クラスのコンストラクタは`Animal`クラスのコンストラクタを呼び出し、`name`プロパティを設定することができます。これにより、`Dog`クラスのインスタンスを作成する際に、親クラスである`Animal`のプロパティも正しく初期化されます。

5. `private` プロパティの影響と注意点

`private`プロパティのため、`Dog`クラス内から`name`に直接アクセスできませんが、`makeSound`メソッドが`Animal`クラスに定義されているため、`Dog`クラスのインスタンスであっても親クラスの`makeSound`メソッドを使って`name`を出力することができます。

6. まとめ

TypeScriptの継承は、親クラスのプロパティやメソッドを子クラスが引き継ぐ非常に強力な機能です。コンストラクタや`super`メソッドをうまく活用することで、より柔軟で再利用性の高いコードを書くことができます。質問者が抱えている疑問についても、このように`super`を使うことで解決でき、`private`プロパティを管理しながら適切に継承を利用することが可能です。

コメント

タイトルとURLをコピーしました