Dlaczego metody klasy Object są dostępne w interfejsie?
Następujący interfejs i klasy zostały pomyślnie skompilowane. Problem został wymieniony w poniższym wyjściu:
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") ;
}
}
wyjście:
X
voilla, MyInterface to interfejs,
to dlaczego kompilator pozwala na kompilację
mi.getClass (), mi.wait ().
Albo jak metody klasy Object są dostępne w interfejsie.
Y
Edytowane : - Przyjmuję odpowiedź z disown, ponieważ jest to najbardziej wyjaśniające. Ale po przeczytaniu odpowiedzi pojawia się jeszcze jeden problem: -
"Pamiętaj, jeśli interfejs próbuje zadeklarować publiczną metodę instancji zadeklarowaną jako „końcowa” w klasie Object, spowoduje to błąd podczas kompilacji. Na przykład „public final Class getClass ()” jest publiczną metodą instancji zadeklarowaną jako „final” w klasie Object, a zatem jeśli interfejs próbuje zadeklarować metodę z tą sygnaturą, kompilacja zakończy się niepowodzeniem„(Cytat z wyjaśnień).
to dlaczego następujący kod jest pomyślnie kompilowany: -
interface MyInter{
public void method() ;
}
class MyClass implements MyInter{
public final void method() {
.......
.......
.......
}
}