インターフェース型は、インターフェースを実装するクラスとのやり取りの方法に関するコントラクトを示します。 インターフェースをインスタンス化することはできませんが、クラスはインターフェースから継承してそのメソッドを実装できます。 インターフェースは、定義の一部として部分的な実装またはフィールドを許可しないことを除いて、抽象クラスに似ています。
たとえば、自転車や馬のように乗ることができるもののインターフェースを作ってみましょう。
Verse
rideable := interface():
Mount()<decides> : void
Dismount()<decides> : voidインターフェースを継承するクラスは、インターフェースの関数を実装し、オーバーライド指定子を追加する必要があります。
Verse
bicycle := class(rideable):
...
Mount<override>()<decides> : void =
...
Dismount<override>()<decides> : void =
...
horse := class(rideable):
...
Mount<override>()<decides> : void =
インターフェースは他のインターフェースを拡張することができます。 たとえば、乗れるものは動けるように指定することができます。
Verse
moveable := interface():
MoveForward() : void
rideable := interface(moveable):
Mount()<decides> : void
Dismount()<decides> : voidクラスはインターフェースと他のクラスから継承することができます。 たとえば、馬を定義し、乗れる鞍のついた馬とその馬を区別することができます。
Verse
horse := class(moveable):
...
MoveForward()<decides> : void =
...
saddle_horse := class(horse, rideable):
...
Mount<override>()<decides> : void =
...
Dismount<override>()<decides> : void =
クラスは複数のインターフェースから継承することができます。
Verse
lockable := interface():
Lock() : void =
...
Unlock() : void =
...
bicycle := class(rideable, lockable):
…
Mount<override>()<decides> : void =
...