1 | Java model is more dynamic than C++ and closer to Smalltalk or Perl. |
2 | Subclasses don't need to to be recompiled after superclass implementation is updated. |
3 | C++ has "fragile superclass" problem where must recompile children if change anything (method/instance variable) in a superclass or referenced class -- Java resolves references at runtime and avoids this. |
4 | Classes have runtime representation (implemented in terms of the Class class) which allows one to look up type of a given object instance at runtime (in C cannot know if pointer is to integer or browser!) |