O tipo interface fornece um contrato de como interagir com qualquer classe que implementa essa interface. Uma interface não pode ser , mas uma classe pode herdar dela e implementar seus métodos. Uma interface é semelhante a uma classe abstrata, com a exceção de que não permite implementação parcial ou campos como parte da definição.
Por exemplo, vamos criar uma interface para qualquer coisa em que você possa andar, como uma bicicleta ou um cavalo:
rideable := interface():
Mount()<decides> : void
Dismount()<decides> : voidQualquer classe que herde a interface deverá implementar as funções dela e adicionar o especificador de substituição:
bicycle := class(rideable):
...
Mount<override>()<decides> : void =
...
Dismount<override>()<decides> : void =
...
horse := class(rideable):
...
Mount<override>()<decides> : void =
Uma interface pode estender outra. Por exemplo, é possível especificar que qualquer coisa em que você possa andar também deve ser capaz de se mover.
moveable := interface():
MoveForward() : void
rideable := interface(moveable):
Mount()<decides> : void
Dismount()<decides> : voidUma classe pode herdar de uma interface e de outra classe. Por exemplo, você pode definir um cavalo e diferenciá-lo de um que tenha uma sela na qual você pode andar:
horse := class(moveable):
...
MoveForward()<decides> : void =
...
saddle_horse := class(horse, rideable):
...
Mount<override>()<decides> : void =
...
Dismount<override>()<decides> : void =
Uma classe pode herdar de várias interfaces.
lockable := interface():
Lock() : void =
...
Unlock() : void =
...
bicycle := class(rideable, lockable):
…
Mount<override>()<decides> : void =
...