今回は、TypeScript でインターフェースを定義して使用する方法について説明します。
目次
インターフェースとは
前回の記事では、抽象クラスを継承することで、実装する際のルールを作ることができると説明しました。
また、抽象クラスはそれ自体ではインスタンスを作成できないため、必ず継承して使われるということも説明しました。
インターフェースも抽象クラスと同様に、クラスが実装するメソッドやプロパティのルールを作ることできます。よってインターフェースを継承するクラスに対して、どのようなメソッドやプロパティを実装させたいのかを定義することができます。
では、抽象クラスとインターフェースはどこが違うのか?ですが、この2つは多重継承できるかどうかという点で異なります。
クラスは抽象クラスを含め1つしか継承できませんが、インターフェースの場合は複数継承することができます。
インターフェースの定義
インターフェースを定義するには interface キーワードを使用します。前述した通り、インターフェースにはメソッドとプロパティを定義することができます。メソッドは抽象メソッドと同様に処理は実装しません。メソッドの処理を実装するのはインターフェースを継承するクラスで行います。
以下は 泳ぐことを意味する ISwim というインターフェースを定義する例です。ここでは swim というメソッドを定義しています。メソッドの中身はサブクラス側で実装しますので、ここでは何も記載しません。なおインターフェース名の先頭の「I」はインターフェースであることがわかるように慣例にしたがって付けています。
interface ISwim { swim(); }
インターフェースは多重継承が可能ですので、もう1つ定義しておきましょう。ここでは 飛ぶことを意味する IFly というインターフェースを定義します。
interface IFly { fly(); }
インターフェースの利用
それでは、実際にインターフェースを継承したクラスを作成してみましょう。ここでは、Car という車を表すクラスを作成します。インターフェースを継承する場合は implements というキーワードを使用します。
IFly と ISwim を継承するので水陸両用の車を定義することができます。
class Car implements ISwim, IFly { swim() { console.log("水中を進む"); } fly() { console.log("空を飛ぶ"); } }
インターフェースを継承したクラスの使用方法は、普通のクラスと変わりありません。以下は、クラス Car のインスタンスを myCar に代入して使用する例です。
let myCar = new Car(); myCar.swim(); myCar.fly();
コメント