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

时间:2011-11-08 08:28:35

标签: 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.. 
    }
}

4 个答案:

答案 0 :(得分:11)

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

这在JLS的9.2 Interface Members部分中指定。

  

9.2接口成员

     

[...]

     
      
  • 如果接口没有直接的超接口,则接口隐式声明带有签名 s 的公共抽象成员方法 m ,返回类型< em> r 和throws子句 t 对应于每个公共实例方法m,签名为 s ,返回类型为 r ,并且抛出在Object 中声明的子句 t ,除非接口显式声明具有相同签名,相同返回类型和兼容throws子句的方法。
  •   
     

[...]

答案 1 :(得分:1)

对于java中的接口: - “所有接口都获取Object类的所有公共和抽象方法”

答案 2 :(得分:1)

因为在接口的情况下,它隐含地包含在Object

中声明的所有public methods

答案 3 :(得分:0)

您的代码无法编译。我将您的代码更改为:

interface TestInterface {

    public void show();
}

class Test implements TestInterface {

    @Override
    public void show() {
        System.out.println("Hello in show");
    }

    @Override
    public String toString() {
        return "Hello in To String";
    }

    public static void main(String[] args) {
        TestInterface obj = new Test();
        obj.show();
        System.out.println(obj.toString());     
    }

}

结果是:

Hello in show
Hello in To String