interface A {
void hi();
}
class AImpl implements A {
public void hi() {
System.out.println("hi");
}
public void to() {
System.out.println("Test");
}
}
public class InterfaceTest {
public static void main(String[] args) {
A a = new AImpl();
a.hi();
System.out.println(a.hashCode());
//a.to();
}
}
这里接口A与Object类没有继承关系,但Object类的所有方法都可以通过接口访问。 为什么呢?
答案 0 :(得分:8)
来自Java Language Specification section 9.2:
界面的成员是:
- 在界面中声明的那些成员。
- 那些成员继承自直接超级接口。
- 如果接口没有直接的超接口,则接口隐式声明public 抽象成员方法m 签名s,返回类型r和throws 条款t对应每个公众 具有签名s的实例方法m, 返回类型r和throws子句t 在Object中声明,除非是方法 具有相同的签名,相同的回报 type和一个兼容的throws子句 由...明确声明 接口。这是一个编译时错误 如果接口明确声明 在m为的情况下的这种方法m 声明在Object中是最终的。
第三个项目符号是重要的 - 基本上不扩展任何其他接口的接口会自动继承hashCode
等。