为什么我们需要允许接口只从java.lang.Object而不是任何其他类扩展?

时间:2015-11-20 11:57:54

标签: java oop inheritance interface extends

  

根据我对Java的一些书籍的理解,接口不能   扩展课程。

     

但是所有接口都从Object类继承方法。为什么是这样   所以?

如果Interface不从Object类扩展。那么这段代码是如何工作的呢?

interface A
{    
 public boolean equals(Object o);

}

class InterfaceAndObjectClass
{

    public static void main(String[] args)
    {
        A a = null;

        a.equals(null);

        a.hashCode();

        a.toString();
    }
}

请帮我解释如何访问Interface中的Object类方法。

2 个答案:

答案 0 :(得分:6)

接口隐式包含Object类的所有方法。由于任何实现该接口的类都是Object的子类,因此它包含所有这些方法的实现。

JLS 9.2

  

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

答案 1 :(得分:1)

伊兰绝对是对的。实际上Interface不会扩展或实现Object类。它隐式包含Object类的所有方法。 注(进一步):

如果声明相同的(抽象)方法(具有相同的名称签名,返回类型和throws类型,编译器会将其视为重写(它的确定),但如果使用不同的返回类型或不同的throws类型编译器将声明强迫你保持相同(兼容)的返回类型或抛出条款。

尝试在界面中声明以下equals方法。 public int equals(Object obj); //它会显示编译时错误返回类型//不兼容。 (它应该是布尔值而不是int)