我们知道每个类都从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扩展?
答案 0 :(得分:5)
这是在JLS §9.2. Interface Members:
中详细说明的
- 如果接口没有直接的超接口,则接口隐式声明
public
abstract
成员方法m
,其签名为s
,返回类型为r
,和throws
子句t
对应每个public
实例方法m
,其中包含签名s
,返回类型r
和throws
子句在t
中声明Object
,除非具有相同签名,相同返回类型和兼容abstract
子句的throws
方法明确声明为界面。
这确保可以通过任何接口调用Object
方法。