Classes and types in object-oriented languages In typical object-oriented programming languages like Java, classes are used as types.  On the other hand, type-theoretic approaches to object-oriented languages treat interfaces as types.

Are there any theoretical frameworks that formalize the use of classes as types?
Core calculi for Java typically take the classes-as-types approach.  Two well-known examples are Featherweight Java and Classic Java.