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.toStringCompiles 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.