O'Reilly logo

Object-Oriented Programming with Visual Basic .NET by J.P. Hamilton

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required