次の例を考えてみましょう。
public interface SimpleInterface {
public void simpleMethod();
}
public class SimpleClass implements SimpleInterface{
public static void main(String[] args) {
SimpleInterface iRef = new SimpleClass();
SimpleClass cRef = new SimpleClass();
iRef.simpleMethod(); // Allowed. Calling methods defined in interface via interface reference.
cRef.specificMethod(); // Allowed. Calling class specific method via class reference.
iRef.specificMethod(); // Not allowed. Calling class specific method via interface reference.
iRef.notify(); // Allowed????
}
public void specificMethod(){}
@Override
public void simpleMethod() {}
}
インターフェース参照を使用するJavaでは、このインターフェースで定義されているメソッドにのみアクセスできると思いました。ただし、クラス Object のメソッドには、任意のインターフェイス参照を介してアクセスできるようです。私の具象クラス「SimpleClass」は、クラス Object が持つすべてのメソッドを継承し、間違いなく、クラス Object はインターフェイスを実装していません (Object は、notify、wait などのメソッドを備えたインターフェイスを実装していると想定されます)。私の質問は、具象クラスの他のメソッドが許可されていないことを考慮して、なぜインターフェイス参照を介してクラス Object のメソッドにアクセスできるのですか?