Most commonly used interface in classes with keys to identify objects.
key is supposed to be unique.
Can be used in == operator and hashCode overrides.
The hash code for this object. [...]
A representation of the runtime type of the object.