Java: Do interfaces inherit from Object?

Interfaces do not inherit from Object . And there is no common "root" interface implicitly inherited by all interfaces either as in the case with classes.(*)

What may seem surprising is that it's still possible to call Object methods (such as toString , hashCode etc) even on interface types.

Serializable s = ""; s .toString Compiles even though Serializable neither

declares toString nor inherits from Object . ();

Formally, this is because each interface implicitly declares one method for each public method in Object . This is explained in detail in the Java Language Specification:

9.2 Interface Members

[…]

If an interface has no direct superinterfaces, then the interface implicitly declares a public abstract member method m with signature s, return type r, and throws clause t corresponding to each public instance method m with signature s, return type r, and throws clause t declared in Object , unless a method with the same signature, same return type, and a compatible throws clause is explicitly declared by the interface. […] JLS 9.2

(*) Note that the notion of being a subtype of is not equivalent to inherits from: Interfaces with no super interface are indeed subtypes of Object (§ 4.10.2. Subtyping among Class and Interface Types) even though they do not inherit from Object .