👀
クラスとインターフェイスの実装【個人学習まとめ】
インターフェイスの実装
クラスがインターフェイスの規約に沿うように設計されることをクラスがインターフェイスを実装(implement
)すると表現する。
キーワードは、implement
。構文は次の通り。
interface SampleInterface {
ダミー
}
class SampleClassName implements SampleInterface {
実装内容
}
実際に動くコードで確認してみる。
interface Rate {
getTaxRate(): number;
}
Shohizei クラスは Rate インターフェイスを実装する
class Shohizei implements Rate {
kingaku: number;
constructor(kingaku: number) {
this.kingaku = kingaku;
}
getTaxRate(): number {
return this.kingaku * 0.1;
}
}
const shohizei = new Shohizei(100);
console.log(shohizei.getTaxRate());
ここでは、まず初めにRate
インターフェイスを定義。
Rate
は戻り値がnumber
型のgetTaxRate
メソッドを持つことが義務付けられている。
戻り値がnumber
型のメソッドを定義しなかった場合は、次のようなエラーとなる。
クラス 'Shohizei' はインターフェイス 'Rate' を正しく実装していません。
プロパティ 'getTaxRate' は型 'Shohizei' にありませんが、型 'Rate' では必須です。
では、クラスShohizei
がRate
を実装していない場合はどうなるのか?
interface Rate {
getTaxRate(): number;
}
Shohizei クラスは Rate インターフェイスを実装する
class Shohizei implements Rate {
kingaku: number;
constructor(kingaku: number) {
this.kingaku = kingaku;
}
- getTaxRate(): number {
- return this.kingaku * 0.1;
- }
}
- const shohizei = new Shohizei(100);
- console.log(shohizei.getTaxRate());
エラーが発生
クラス 'Shohizei' はインターフェイス 'Rate' を正しく実装していません。
プロパティ 'getTaxRate' は型 'Shohizei' にありませんが、型 'Rate' では必須です。ts(2420)
クラスShohizei
は、Rate
インターフェイスのgetTaxRate
メソッドを実装していない。
そのため**Rate
インターフェイスの要件を満たしていない**ということを示すエラーが発生する。
クラスがインターフェイスを実装することによって、クラスがインターフェイスの構造に従っていることが確実になる。
これにより、クラスからオブジェクトを生成したインスタンス(インスタンス化)の型もインターフェイスに従っていることが保障される。
Discussion