I think that Object has a full lack of cohesion. I will describe why method by method:

- hashCode: This method should have been defined in an interface related to hash tables. That's the way Comparable was designed in benefit of other implementation of collections.

- equals: This method has sense, may be the only one.

- clone: Why is defined here if there is a specific interface "Cloneable"? Instead of it, they took the desition of throw an exception (CloneNotSupportedException). Native code that implement it could be in another class... Classloader?

- toString: Less cohesive than "equals", it has a debug sense of being.... a shortcut of getClass().getName()

- notify, notifyAll, wait x 3: All them related with the use of the object as monitor in threads programing... why no define them in another class or interface?

- getClass: The most cohesive of all them.

What do you believe? They did a good design of Object?