[英]Interfaces and Abstract Classes in Java
Java中的接口和抽象类是否扩展了基本Object类? 我能想到的逻辑答案是“否”,但是如果接口不扩展Object类,那么请有人向我解释以下代码:
interface A {
@Override
public int hashCode();
@Override
public String toString();
}
在上述情况下, A接口是声明的新接口。 但是,目前还没有班级实施它。 那么,如何在接口中看到Object类中的方法呢?
如果它没有扩展Object类,那为什么我不能在接口中声明以下方法:
public Class getClass();
当我尝试在接口中声明此方法时,它说它无法覆盖从Object类继承的此方法,因为它在Object类中声明为final方法。
接口只能扩展其他接口,而不能扩展-没有任何根接口。 与Java中的其他任何类一样,抽象类也将Object作为其祖先-尽管它可能不是直接父代。
标记为final的方法不能在后继类中覆盖。 由于您的类将Object作为其祖先-此规则在这里也适用。
可以在JLS $ 9.2中找到原因。
如果接口没有直接的超接口,则该接口隐式声明带有签名s的公共抽象成员方法m,返回类型r,并引发与每个带有签名s的公共实例方法m,返回类型r和throws子句t对应的子句t在Object中声明,除非接口显式声明了具有相同签名,相同返回类型和兼容throws子句的方法。
如果在Object中将m声明为final的情况下,接口显式声明了这样的方法m,则是编译时错误。
public final Class<?> getClass()
接口不继承Object
,但他们做的模拟天生可通过隐含加入它们的方法。 同样,在此基础接口中的final
方法不能在自定义接口中被覆盖。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.