Почему методы класса 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() {
        .......
        .......
              .......
    }

}

Ответы на вопрос(5)

Ваш ответ на вопрос