Generic types
Generic classes
Generic methods
Substitution principle