Почему методы класса Object доступны в интерфейсе?
Следующий интерфейс и классы успешно скомпилированы. Проблема упоминается в выходных данных ниже:
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") ;
}
}
выход :
X
Вуаля, MyInterface это интерфейс,
тогда почему компилятор позволяет компилировать
mi.getClass (), mi.wait ().
Или как методы класса Object доступны в интерфейсе.
Y
отредактированный : - Я принимаю ответ от отречения, так как он наиболее объяснительный. Но после прочтения ответа заполняется еще одна проблема:
"Помните, что если интерфейс попытается объявить открытый метод экземпляра, объявленный как final в классе Object, то это приведет к ошибке во время компиляции. Например, public final Class getClass () - это открытый метод экземпляра, объявленный как final в классе Object, и поэтому, если интерфейс пытается объявить метод с этой сигнатурой, компиляция завершится неудачно."(Цитируется из объяснения).
тогда почему следующий код успешно компилируется:
interface MyInter{
public void method() ;
}
class MyClass implements MyInter{
public final void method() {
.......
.......
.......
}
}