Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多形性与类对象_Java_Polymorphism - Fatal编程技术网

Java 多形性与类对象

Java 多形性与类对象,java,polymorphism,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 : becaus

我们知道每个类都从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(){         

          }

      }

所以我认为问题很清楚,为什么我可以调用toString方法,尽管接口B不能从Object扩展?

这在下面的部分中有详细说明:

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

这确保了可以通过任何接口调用
对象
方法。

A
对象
扩展而来。不,是这样的。Java中的每个
对象
都有一个
toString
B
的一个实例是一个
对象
。因为,正如您在问题中所说:我们知道每个类都是从对象扩展而来的,这意味着我们可以在任何情况下使用所有对象的方法class@OliverCharlesworth
A
扩展的内容与
B
类型的变量无关。这是一个关于类型系统的有效问题。@MarkoTopolnik:这是一个公平的观点;我没有注意到对象是通过
B
引用访问的。所以理论上有点像
接口对象,所有最上层的接口(没有超类的接口)都扩展了它?