A type corresponds to the notion of an abstract data type (Atkinson and Buneman, 1989). In
programming languages, a variable is declared to be of a particular type. The compiler
can use this type to check that the operations performed on the variable are compatible
with its type, thus helping to ensure the correctness of the software. On the other hand, a
class is a blueprint for creating objects and provides methods that can be applied on the
objects. Thus, a class is referred to at runtime rather than compile time.