  This paper addresses compositional and incremental type checking for
object-oriented programming languages. Recent work achieved incremental type
checking for structurally typed functional languages through co-contextual
typing rules, a constraint-based formulation that removes any context
dependency for expression typings. However, that work does not cover key
features of object-oriented languages: Subtype polymorphism, nominal typing,
and implementation inheritance. Type checkers encode these features in the form
of class tables, an additional form of typing context inhibiting
incrementalization. In the present work, we demonstrate that an appropriate
co-contextual notion to class tables exists, paving the way to efficient
incremental type checkers for object-oriented languages. This yields a novel
formulation of Igarashi et al.'s Featherweight Java (FJ) type system, where we
replace class tables by the dual concept of class table requirements and class
table operations by dual operations on class table requirements. We prove the
equivalence of FJ's type system and our co-contextual formulation. Based on our
formulation, we implemented an incremental FJ type checker and compared its
performance against javac on a number of realistic example programs.
