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
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.
(*) 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