Indeed, object-oriented programming usefully can be seen as programming types , and classes simply as an enrichment of the native type system. When we develop a class, we want to be able to use it in client programs with all the freedom that we use a native type. In addition, you will be able to connect the concepts of types, variables, values, etc. with classes, objects, object state, etc. Invisibility of the underlying internal representation. Values A value is an element of the set associated with a type .
Values are abstractions .
The value 2 describes the general concept of twoness - of all pairs of anything. A type , e.g. int . A location - the address in memory where it is stored. A value . Static Typing Usually, an identifier is statically bound to a type, i.e. the type of the variable is known at compile time, and is fixed thereafter.