What makes a type different from class and vice versa?
(In the general language-agnostic sense)
Different classes may describe the same type.
Type consists of these parts:
Class consists of these parts:
Some notes:
Interface (as in Java) is not type, because it does not describe semantics (describes only syntax)
Subclass is not subtype, because subclass may change semantics defined in superclass, subtype cannot change supertype semantics (see Liskov Substitution Principle, e.g. this LSP example).