繁体   English   中英

Java中的接口和抽象类

[英]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,则是编译时错误。

Object#getClass

public final Class<?> getClass()

接口继承Object ,但他们做的模拟天生可通过隐含加入它们的方法。 同样,在此基础接口中的final方法不能在自定义接口中被覆盖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM