- baby Java - ADT specification (signature, algebraic specification) - algebraic reasoning - implementation in Java - static vars / methods - interface & substitutability - black box testing - type system / subclassing - canonical methods - implicit specs - boxing / unboxing - exceptions - inheritance - dynamic dispatch - visibility (public/protected/private) - abstract classes - recipe for translating an ADT specification into an implementation - nested classes - non-tree hierarchies - multiple inheritance - interfaces - iterators - generic interfaces