Let's remember this definition: subtypes must be substitutable for their base types. This means that this should happen without breaking the execution or losing any other kind of functionality.
You'll notice that this idea lies behind the basic principles of inheritance in the OOP programming paradigm.
If you have a method that requires an argument of the
Person type (let's put it that way), you can pass an instance of another class (
Provider, and so on) as long as these instances inherit from
This is one of the main advantages of well-designed OOP languages, and the most popular and accepted languages support this characteristic.
Let's take a look at the support inside our sample, ...