A Slice class can also be used as a servant in a server, that is, an instance of a class can be used to provide the behavior for an interface, for example:
interface Time { idempotent TimeOfDay getTime(); idempotent void setTime(TimeOfDay time); }; class Clock implements Time { TimeOfDay time; };
The implements
keyword indicates that the class Clock
provides an implementation of the Time
interface. The class can provide data members and operations of its own; in the preceding example, the Clock
class stores the current time that is accessed via the Time
interface. A class can implement several interfaces, for example:
interface Time { idempotent TimeOfDay getTime(); idempotent void setTime(TimeOfDay time); }; interface Radio { idempotent void setFrequency(long hertz); idempotent void setVolume(long dB); }; class RadioClock implements Time, Radio { TimeOfDay time; long hertz; };
The class RadioClock
implements both Time
and Radio
interfaces.
A class, in addition to implementing an interface, can also extend another class:
interface Time { idempotent TimeOfDay getTime(); idempotent void setTime(TimeOfDay time); }; class Clock implements Time { TimeOfDay time; }; interface AlarmClock extends Time { idempotent TimeOfDay getAlarmTime(); idempotent void setAlarmTime(TimeOfDay alarmTime); }; interface Radio { idempotent void setFrequency(long hertz); idempotent void setVolume(long dB); }; class RadioAlarmClock extends Clock implements AlarmClock, Radio { TimeOfDay alarmTime; long hertz; };
These definitions result in the following inheritance graph:
A Class using implementation and interface inheritance.
For this definition, Radio
and AlarmClock
are abstract interfaces, and Clock
and RadioAlarmClock
are concrete classes. As for Java, a class can implement multiple interfaces, but can extend at most one class.