Let me, therefore, remind you of some important basic concepts. Part of the definition of any given type is a specification of the set of all possible values of that type. Such values can be of arbitrary complexity. The actual or physical representation of such values is always hidden from the user. Such values can be operated upon solely by means of the operators defined for the type in question.
Some types are subtypes of other supertypes .
All values are typed. Without inheritance, every value is of exactly one type. All variables are also typed. Every variable is declared to be of exactly one type. Without inheritance, all possible values of a given variable are of exactly one type, namely the applicable declared type.