この動画はメンバー限定動画です
全ての講座が
月額990円で学び放題
ここでは、1つクラスを使いながらクラス定義の復習をしつつ、誕生日から年齢を計算するという、少し実用的なプログラムを作成してみましょう。
ここでは、次のようなプログラムを作成してみましょう。
- Personという抽象クラスを作る
- Personを継承したMemberクラスとGuestクラスを作る
- Memberクラスには生年月日をプロパティとして準備する
- Memberクラスに年齢を取得するメソッドを定義し、計算して返す
では早速作っていきましょう。
Personクラス、Guestクラスを定義しよう
まずは、Personクラスを定義します。このクラスには、nameプロパティのみがある、シンプルな抽象クラスです。また、コンストラクタで名前の初期値を設定できるようにします。
abstract class Person {
public name: string;
constructor(name: string) {
this.name = name;
}
}
このクラスは「抽象クラス」なので、直接このインスタンスを作ることはできません。そこで、継承クラスとして「Guest」クラスを作りましょう。
class Guest extends Person {
}
次のようにして使うことができます。
let taro = new Guest("Taro");
console.log(taro.name);
Memberクラスを定義しよう
続いて、Memberクラスを定義しましょう。こちらには、誕生日のプロパティを追加します。プライベートプロパティとして、セッターとゲッターも準備します。
class Member extends Person {
private _birth: Date;
get birth(): Date {
return this._birth;
}
set birth(value: Date) {
this._birth = value;
}
}
コンストラクタを拡張しよう
ここで、誕生日もコンストラクタで設定できるようにしたいとしましょう。しかし、親クラスにもコンストラクタが定義されているため、普通に定義することはできません。
constructor(name: string, birth: Date) {
this._birth = birth;
}
こうすると、次のようなエラーが表示されます。
派生クラスのコンストラクターには ‘super’ の呼び出しを含める必要があります。
これは、親クラスのコンストラクタを呼び出していないため。親クラスでもコンストラクタが定義されている場合、子クラスからはこのコンストラクタを呼び出す必要があります。ここで必要なのが「super」という記述です。次のように追加しましょう。
constructor(name: string, birth: Date) {
super(name);
this._birth = birth;
}
これで、親クラスのコンストラクタが呼び出されるようになり、正しくプロパティがセットされるようになります。
これで、Memberクラスができあがりました。次のようにして利用できます。
const yoshiko = new Member("Yoshiko", new Date("2000-01-03"));
console.log(yoshiko.name);