5.3. Interfaces Versus Abstract Base Classes

Interfaces provide all the benefits of polymorphism. You can code against an interface much like you can code an abstract base class:

Dim superSport As New Car( )
.
.
.
PaintSomeStuff(superSport)
.
.
.
Public Sub PaintSomeStuff(someThing As IPaintable)
    someThing.Paint( )
End Sub

So what is the difference between an interface and an abstract base class? When should you use one over the other?

If you are describing an is-a relationship, you can use an abstract base class. An interface, on the other hand, usually describes a service or facility that can be used across a wide variety of objects. For instance, House, Car, and Fence are three very different classes, but each could implement IPaintable and handle the painting process in a manner specific to its needs.

This describes a typical scenario and is a pretty good guideline to follow, but it is by no means set in stone. Just because an is-a relationship is described doesn't mean you can't use an interface in place of an abstract base class. If there is no implementation in the base class, there is no reason not to use an interface instead. The Payment class you have already seen could easily be rewritten as an interface:

Public Interface IPayment
    Function Authorize(amount As Decimal) As Boolean
    Function Bill( ) As Boolean
    Function Credit( ) As Boolean
End Interface

One advantage of using interfaces is that the number a class can implement is unlimited (in theory). You can implement ...

Get Object-Oriented Programming with Visual Basic .NET now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.