Do interfaces inherit from Object
class in Java?
No, they don't. And there is no common "root" interface implicitly inherited by all interfaces either (as in the case with classes) for that matter.(*)
If no then how we are able to call the method of object class on interface instance
An interface implicitly declared one method for each public method in Object
. Thus the equals
method is implicitly declared as a member in an interface (unless it already inherits it from a superinterface).
This is explained in detail in the Java Language Specification, § 9.2 Interface Members.
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.
[...]
This post has been rewritten as an article here.
(*) 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
.
Serializable
is an interface, the simplest possible; runningjavap
on it tells you what it inherits from; and that is dictated by the Java Language Specification. If you think the JVM Spec comes into it somewhere please enlighten us. – Fenwick