4.7. Substitution

One of polymorphism's best features is that it allows you to use a derived class where a base class is expected. It sounds crazy, but it's true. And because of that, it also allows you to write some amazingly adaptable code. Look at the following fragment:

Dim pmt As Payment
pmt = New CreditCard( )
pmt.Authorize(3.33)

Guess what method is called as a result of running this code? If you guessed CreditCard.Authorize, you are right.

To use a real-world context as an example, some larger online retailers allow the use of multiple payments when placing an order. Theoretically, each payment could be different: a credit card, a gift certificate, and maybe some kind of Internet-based cash. In a situation like this, you could create a very adaptable solution by writing the following code:

'Pseudo-code
Dim p As Payment
Dim payments( ) As Payment
   
payments(0) = New GiftCertificate(30.00)
payments(1) = New NuttyCash(15.00)
payments(2) = New CreditCard("1234")
   
For Each p In payments
    p.Bill( )
Next p

An array of the base type, Payment, was declared. The array serves as a container that can hold any object derived from the base Payment type. When the Bill method is called for each element, the appropriate version of the method is called. If the payment is a credit card, then CreditCard.Bill is called. If it is a gift certificate, then GiftCertificate.Bill is called, and so on.

You can also declare methods that expect a base class like this:

Private Function ProcessPayment(ByVal ...

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.