Por que os métodos de classe de objeto estão disponíveis na interface?
A seguinte interface e classes são compiladas com sucesso. Problema é mencionado na saída abaixo:
interface MyInterface{}
class MyClass implements MyInterface{}
class InterDoubt{
static MyInterface mi ;//= new MyClass() ;
public static void main(String[] args){
System.out.println("X") ;
try{
synchronized(mi){
try{
mi.wait(4000) ;
}
catch(InterruptedException ie){
System.out.println("Exception occured at main.") ;
}
}
}
catch(Exception e){
System.out.println("voilla, MyInterface is an interface,\n" +
"then why compiler allows compilation of\n" +
"mi.getClass(), mi.wait().\n" +
"Or how the methods of Object class are available in an interface."
);
}
System.out.println("Y") ;
}
}
saída:
X
voilla, MyInterface é uma interface,
então porque o compilador permite a compilação de
mi.getClass (), mi.wait ().
Ou como os métodos da classe Object estão disponíveis em uma interface.
Y
Editado : - Estou aceitando a resposta do disown, como é o mais explicativo. Mas depois de ler a resposta, mais uma questão é preenchida:
"Lembre-se de que, se a interface tentar declarar um método de instância pública declarado como 'final' na classe Object, isso resultará em um erro de tempo de compilação. Por exemplo, 'public final Class getClass ()' é um método de instância pública declarado 'final' na classe Object e, portanto, se uma interface tentar declarar um método com essa assinatura, a compilação falhará."(Citado da explicação).
então porque o seguinte código está sendo compilado com sucesso: -
interface MyInter{
public void method() ;
}
class MyClass implements MyInter{
public final void method() {
.......
.......
.......
}
}