VBA Interfaces Multiple Interfaces in One Class - Flyable and Swimable


Example

Using the Flyable example as a starting point, we can add a second interface, Swimmable, with the following code:

Sub Swim()
    ' No code
End Sub

The Duck object can Implement both flying and swimming:

Implements Flyable
Implements Swimmable

Public Sub Flyable_Fly()
    Debug.Print "Flying With Wings!"
End Sub

Public Function Flyable_GetAltitude() As Long
    Flyable_GetAltitude = 30
End Function

Public Sub Swimmable_Swim()
    Debug.Print "Floating on the water"
End Sub

A Fish class can implement Swimmable, too:

Implements Swimmable

Public Sub Swimmable_Swim()
    Debug.Print "Swimming under the water"
End Sub

Now, we can see that the Duck object can be passed to a Sub as a Flyable on one hand, and a Swimmable on the other:

Sub InterfaceTest()

Dim MyDuck As New Duck
Dim MyAirplane As New Airplane
Dim MyFish As New Fish

Debug.Print "Fly Check..."

FlyAndCheckAltitude MyDuck
FlyAndCheckAltitude MyAirplane

Debug.Print "Swim Check..."

TrySwimming MyDuck
TrySwimming MyFish

End Sub

Public Sub FlyAndCheckAltitude(F As Flyable)
    F.Fly
    Debug.Print F.GetAltitude
End Sub

Public Sub TrySwimming(S As Swimmable)
    S.Swim
End Sub

The output of this code is:

Fly Check...

Flying With Wings!

30

Flying With Jet Engines!

10000

Swim Check...

Floating on the water

Swimming under the water