The non-final functions are clone (), finalize (), toString (), equals (), hashCode () and. The other methods like wait (), getClass (), notifyAll (), notify () etc are final functions and therefore cannot be overridden.
The hashCode() and equals() methods have to be very important, when objects implementing these two functions are added to collections. If not implemented or implemented incorrectly at all then your objects added in a collection like a Set, Map or List can behave strangely and also is hard to debug.