The interface Flyable
is a class module with the following code:
Public Sub Fly()
' No code.
End Sub
Public Function GetAltitude() As Long
' No code.
End Function
A class module, Airplane
, uses the Implements
keyword to tell the compiler to raise an error unless it has two methods: a Flyable_Fly()
sub and a Flyable_GetAltitude()
function that returns a Long
.
Implements Flyable
Public Sub Flyable_Fly()
Debug.Print "Flying With Jet Engines!"
End Sub
Public Function Flyable_GetAltitude() As Long
Flyable_GetAltitude = 10000
End Function
A second class module, Duck
, also implements Flyable
:
Implements Flyable
Public Sub Flyable_Fly()
Debug.Print "Flying With Wings!"
End Sub
Public Function Flyable_GetAltitude() As Long
Flyable_GetAltitude = 30
End Function
We can write a routine that accepts any Flyable
value, knowing that it will respond to a command of Fly
or GetAltitude
:
Public Sub FlyAndCheckAltitude(F As Flyable)
F.Fly
Debug.Print F.GetAltitude
End Sub
Because the interface is defined, the IntelliSense popup window will show Fly
and GetAltitude
for F
.
When we run the following code:
Dim MyDuck As New Duck
Dim MyAirplane As New Airplane
FlyAndCheckAltitude MyDuck
FlyAndCheckAltitude MyAirplane
The output is:
Flying With Wings!
30
Flying With Jet Engines!
10000
Note that even though the subroutine is named Flyable_Fly
in both Airplane
and Duck
, it can be called as Fly
when the variable or parameter is defined as Flyable
. If the variable is defined specifically as a Duck
, it would have to be called as Flyable_Fly
.