👀

クラスとインターフェイスの実装【個人学習まとめ】

2025/01/31に公開

インターフェイスの実装

クラスがインターフェイスの規約に沿うように設計されることをクラスがインターフェイスを実装(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' では必須です。

では、クラスShohizeiRateを実装していない場合はどうなるのか?

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