Object is the base class for all other Java classes. This means that all classes implicitly support toString and hashCode. But many classes override one or both, so they don't get Object's default implementations.
For instance, toString of a Double object will return a meaningful default-formatted version of the floating-point number, while hashCode of a double will return a hashed version of the float value, suitable for keying searches in a hashtable.
toString is intended primarily to support debug printing. What it returns is whatever the developer felt made the "most sense" for that specific object class. (For Object there's not much to work with, so the class name in combination with the text representation of the hashCode value is used.) hashCode, on the other hand, is intended to facilitate hash-based searching, and so the developer attempts to produce a number that has a high probability of being different on objects that compare differently, but is guaranteed to be identical on objects that compare as equal.