多态和类Object

use*_*992 2 java polymorphism

我们知道每个类都从Object扩展,这意味着我们可以在任何类中使用所有Object的方法.我的问题如下:

   interface B{

       }

       public class A implements B{
          public static void main(String[] args){

             B i = new A();
             i.display();//we can't do this : because the interface B doesn't define such a method

             System.out.println(i.toString());// we can do this although the interface doesn't extend from Object                           

          }
          public void display(){         

          }

      }
Run Code Online (Sandbox Code Playgroud)

所以我认为问题很明显,为什么我可以调用toString方法虽然接口B不能从Object扩展?

NPE*_*NPE 5

这在JLS§9.2中有详细说明.接口成员:

  • 如果接口没有直接的超接口,那么接口隐式声明一个public abstract成员方法m,该方法具有签名s,返回类型rthrows子句,t对应于每个具有签名,返回类型和声明的子句的public实例方法,除非具有相同签名的方法,相同的返回type,并且接口显式声明兼容子句.msrthrowst Objectabstractthrows

这确保了可以Object通过任何接口调用方法.