Java中的接口如何获取Object类的方法?

4 java

我知道在动态绑定的情况下,只能调用当前类中存在的那些方法.如果子覆盖父方法,则执行子方法,否则将执行parent方法...

但是在接口的情况下发生了什么,我不知道......这是我的意思的一个例子:

interface TestInterface {
    public void show();
}

class Test implements TestInterface {
    public void show() {
        System.out.println("Hello in show");
    }

    public String toString() {
        System.out.println("Hello in To String");
        return "";
    }

    public static void main(String[] args) {   
        TestInterface obj = new Test();      
        obj.show();
        obj.toString();    // why it run vilate dynamic binding rule.. 
    }
}
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 11

这是因为接口隐式包含声明的所有公共方法Object.

这在JLS的9.2接口成员中指定.

9.2接口成员

[...]

  • 如果接口没有直接的超接口,则接口隐式声明一个公共抽象成员方法m,其中包含签名s,返回类型r和throws子句t,对应于具有签名s的每个公共实例方法m ,返回类型r和throws子句t 声明在Object,除非接口显式声明具有相同签名,相同返回类型和兼容throws子句的方法.

[...]