subtype definition programming
If S is a subtype of T then an expression of type
S may be used anywhere that one of type T can and an implicit type conversion
will be applied to convert it to type T.
In object oriented programming, this means that objects
of type S must accept every message
that one of type T would.