Polyglot is a compiler front end framework for building Java language extensions that doesn't seem to have been mentioned here.

Amongst the extensions is an implementation of nested inheritance which, I admit, I don't completely get. There's a discussion (moderately critical) of the paper in the context of OCaml that starts here.

This caught my eye while scanning the latest Caml Weekly News - a useful summary of the (rather high volume) (O)Caml list.

It is shown that the essential OO concepts and idioms, including inheritance and dynamic dispatch, can be encoded in this well understood framework, without requiring any operational or typing extensions of ML...

[The encodings] do not rely on subtyping and subsumption, but on an encoding of inheritance polymorphism into paramteric polymorphism.

Smalltalk-80 was an important and enlightening experiment in just how far object-orientation can be taken in a programming language. It is simple, compact, and shows a rare and refreshing integrity of concept. To accomplish its goals, it introduces the idea that the variables of a class can be either class variables or instance variables, and the methods can be either class methods or instance methods. This turns the class into a mixture of two fundamentally different conceptsâ€”type and moduleâ€”with very different semantics. Smalltalk manages to do this relatively cleanly.

Unfortunately, two more recent languages, C++ and Java, have taken this same distinction and turned it into a gratuitous mess.

The author is of the opinion that [t]he best-designed languages give you two abstraction toolsâ€”a module and an object typeâ€”each of which serves its own purpose reasonably well - I wonder if he is thinking about Smalltalk or about Ada...