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 ...