This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
I am not able to think of any reasons other than providing the functionality of Object class. I mean there are quite a few functionality in java.lang.Object. If the user defined class(es) are made to be inherited from it all those will also be inherited. Is there any reason other than that?
It's just how Java is defined to work: all classes have class java.lang.Object at the top of their inheritance hierarchy. Because of that, the methods defined in class java.lang.Object are available on all classes. The people who designed the Java language thought that it would be a good idea to have a common superclass for all classes, where they could put special functionality in. There's not much more to it.
One example of functionality that's available on all objects is the following: all Java objects have a lock, so that you can synchronize on any object. Class Object contains some methods to support this (wait, notify and notifyAll).
Also, all objects have an equals, hashCode and toString method, because those are defined in class Object.