Reputation: 2037
Do interfaces inherit from Object
class in Java?
If no then how we are able to call the method of object class on interface instance
public class Test {
public static void main(String[] args) {
Employee e = null;
e.equals(null);
}
}
interface Employee {
}
Upvotes: 171
Views: 34986
Reputation: 421020
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.[...]
(*) 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
.
Upvotes: 170
Reputation: 1
The method of compiling the inserted object declaration is not found in the class file. The method name of the object for which the metaclass information is not obtained is reflected at runtime. According to the official description, the method signature of the object is implicitly extended, which may be allowed by the JVM runtime mechanism
Upvotes: 0
Reputation: 55
An interface does not and cannot extend Object class, because an interface has to have public and abstract methods.
For every public method in the Object class, there is an implicit public and abstract method in an interface.
This is the standard Java Language Specification which states like this,
“If an interface has no direct super interfaces, 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.”
Upvotes: 0
Reputation: 1044
Is interface inherits Object class, how can we able to access the methods of object class through a interface type reference
No Interface does not inherits Object
class, but it provide accessibility to all methods of Object
class.
The members of an interface are:
Those members declared in the interface.
Those members inherited from direct superinterfaces.
If an interface has no direct superinterfaces, then the interface implicitly
declares a public abstract member method corresponding to each public instance method declared in Object
class.
It is a compile-time error if the interface explicitly declares such a method m in the case where m is declared to be final
in Object
.
Now it is clear that all superinterface have abstract
member method corresponding to each public
instance method declared in Object
.
source: http://ohmjavaclasses.blogspot.com/2011/11/is-intreface-inherits-object-clashow.html
Upvotes: 3
Reputation: 1405
"Reference types all inherit from java.lang.Object. Classes, enums, arrays, and interfaces are all reference types."
Quoted from: http://docs.oracle.com/javase/tutorial/reflect/class/index.html Second sentence to be clear.
Upvotes: 0
Reputation: 45443
Object
is a supertype of any interface [1]
However, an interface does not implements
, extends
, or, "inherit from" Object
.
JLS has a special clause to add Object
methods into interfaces [2]
[1] http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.10.2
[2] http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.2
Upvotes: 22
Reputation: 89169
That's because employee e = ...
reads that there is a class that implements employee
, and is assigned to variable e
. Every class that implements an interface extends Object implicitly, hence when you do e.equals(null)
, the language knows that you have a class that is a subtype of employee
.
The JVM will do runtime checking for your code (i.e. throw NullPointerException
).
Upvotes: 5
Reputation: 48629
There is actually a superclass field in every .class
file, including those that represent interfaces.
For an interface it always points to java.lang.Object
. But that isn't used for anything.
Another way to look at it is:
interface MyInterface {
// ...
}
public myMethod(MyInterface param) {
Object obj = (Object) param;
// ...
}
Here the cast (Object) param
is always valid, which implies that every interface type is a subtype of java.lang.Object
.
Upvotes: 12
Reputation: 12347
Any class implementing any interface is also derived from Object
as well by definition.
Upvotes: 0