As interfaces herdam da Object
classe em Java?
Se não, como podemos chamar o método da classe de objeto na instância da interface
public class Test {
public static void main(String[] args) {
Employee e = null;
e.equals(null);
}
}
interface Employee {
}
java
inheritance
interface
lagoas
fonte
fonte
Serializable
é uma interface, a mais simples possível; correrjavap
nele diz a você do que herda; e isso é ditado pela Java Language Specification. Se você acha que a JVM Spec entra em algum lugar, por favor, nos esclareça.Respostas:
Não, eles não. E também não existe uma interface "raiz" comum herdada implicitamente por todas as interfaces (como no caso das classes). (*)
Uma interface declarou implicitamente um método para cada método público em
Object
. Portanto, oequals
método é implicitamente declarado como membro de uma interface (a menos que já o herda de uma superinterface).Isso é explicado em detalhes na Especificação da Linguagem Java, § 9.2 Membros da Interface .
Esta postagem foi reescrita como um artigo aqui .
(*) Observe que a noção de ser um subtipo de não é equivalente a herdar de : Interfaces sem super interface são de fato subtipos de
Object
( § 4.10.2. Subtipagem entre tipos de classe e interface ), mesmo que não sejam herdados deObject
.fonte
Object
classe não tivessem sido declarados na interface?equals
método naEmployee
interface.Object
é um supertipo de qualquer interface [1]No entanto, uma interface não faz
implements
,extends
ou, "herdam"Object
.O JLS possui uma cláusula especial para adicionar
Object
métodos às 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
fonte
java.lang.Object
também aceitará uma referência de qualquer tipo de interface. Além disso, você pode converter a interfaceObject
implicitamente em nenhum erro do compilador.Na verdade, existe um campo de superclasse em todos os
.class
arquivos, incluindo aqueles que representam interfaces.Para uma interface, ela sempre aponta para
java.lang.Object
. Mas isso não é usado para nada.Outra maneira de ver isso é:
Aqui o elenco
(Object) param
é sempre válida, o que implica que cada tipo de interface é um subtipo dejava.lang.Object
.fonte
Isso
employee e = ...
ocorre porque lê que há uma classe que implementaemployee
e é atribuída à variávele
. Toda classe que implementa uma interface estende Object implicitamente, portanto, quando o faze.equals(null)
, a linguagem sabe que você tem uma classe que é um subtipo deemployee
.A JVM fará a verificação do tempo de execução do seu código (ou seja, throw
NullPointerException
).fonte
Is interface herda Object class, como podemos acessar os métodos da classe Object através de uma referência de tipo de interface
No Interface não herda a
Object
classe, mas fornece acessibilidade a todos os métodos daObject
classe. Os membros de uma interface são:declara um método público abstrato do membro correspondente a cada método de instância pública declarado na
Object
classe .É um erro de tempo de compilação se a interface declara explicitamente tal método um m no caso em que m é declarado
final
noObject
.Agora está claro que todas as superinterface têm um
abstract
método membro correspondente a cadapublic
método de instância declarado emObject
.fonte: http://ohmjavaclasses.blogspot.com/2011/11/is-intreface-inherits-object-clashow.html
fonte
Qualquer classe que implemente qualquer interface também é derivada
Object
também por definição.fonte
" Todos os tipos de referência herdam de java.lang.Object . Classes, enumerações, matrizes e interfaces são todos os tipos de referência. "
Citado em: http://docs.oracle.com/javase/tutorial/reflect/class/index.html Segunda frase a ser esclarecida.
fonte
Classes, enums, and arrays (which all inherit from java.lang.Object) as well as interfaces are all reference types
: não diz que a interface herda de Object. Somente Classes, enums e matrizes.