Generic classes
Generic methods
Substitution principle