interface Intf {
}
class A implements Intf {
}
class Test {
public static void main(String[] args) {
Intf obj = new A();
obj.toString();
}
}
一个朋友给我看了这段代码,我无法向他解释......
我们知道“引用”对象中定义的方法只能在实例上运行。
正如我们所看到的,没有方法被定义Intf
但是 obj (指的是Intf
) 能够调用toString()
Object.class 的方法
我安慰他说,Java 中的一切都是对象(尽管我们在 Eclipse IDE 中没有自动填充选项)Intf
)
正如我们所看到的,没有方法被定义Intf
实际上,有一个隐式声明toString
中的方法Intf
.
每个接口(不显式扩展另一个接口)对于每个公共方法都有一个隐式方法声明Object
.
Java 语言规范对此进行了详细解释,§9.2 接口成员 http://java.sun.com/docs/books/jls/second_edition/html/interfaces.doc.html#32392.
9.2 接口成员
[...]
- 如果接口没有直接的超级接口,然后接口隐式声明一个公共抽象成员方法m有签名s, 返回类型r,并抛出子句t对应每个带有签名的公共实例方法 ms, 返回类型r,并抛出子句t声明于
Object
,除非接口显式声明了具有相同签名、相同返回类型和兼容的 throws 子句的方法。
[...]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)