接口是否从 Java 中的 Object 类继承

2022-08-31 07:02:12

接口是否继承自 Java 中的类?Object

如果不是,那么我们如何能够在接口实例上调用对象类的方法

public class Test {
    public static void main(String[] args) {
        Employee e = null;
        e.equals(null);
    }
}

interface Employee {
}

答案 1

接口是否继承自 Java 中的 Object 类?

不,他们没有。而且,对于这个问题,也没有一个通用的“根”接口被所有接口隐式继承(就像类一样)。(*)

如果不是,那么我们如何能够在接口实例上调用对象类的方法

接口为 中的每个公共方法隐式声明了一个方法。因此,该方法被隐式声明为接口中的成员(除非它已经从超接口继承了它)。Objectequals

这在 Java 语言规范 § 9.2 接口成员中有详细说明。

9.2 接口成员

[...]

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

[...]


这篇文章已经重写为一篇文章在这里


(*)请注意,作为 子类型的概念并不等同于继承自:没有超级接口的接口确实是 Object 的子类型 (§ 4.10.2.类和接口类型之间的子类型),即使它们不是从 Object 继承的


答案 2

Object是任何接口的超类型 [1]

但是,接口不会 、或 “继承自”。implementsextendsObject

JLS有一个特殊的子句,用于将方法添加到接口中[2]Object

[1] http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.10.2

[2] http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.2


推荐