我们将注释定义为接口,如下所示
@interface annot_name {
}
我们知道默认情况下所有注释都会扩展接口java.lang.annotation.Annotation
。
当我检查java库中的Annotation
接口时,我发现它覆盖了许多Object类的方法,如hashCode()
等。
如果Annotation是一个接口,那么它如何扩展Object类并覆盖其方法?接口只能扩展其他接口,而不能扩展类。
答案 0 :(得分:18)
所以我的问题是,如果Annotation是一个接口那么它怎么可能 扩展Object类并覆盖其方法
不完全是。 The Java Language Specification §9.2 says
如果接口没有直接的超级接口,则接口 隐式声明带有签名的
public abstract
成员方法m
s
,返回类型r
以及与throws
对应的t
子句public
带有签名m
的实例方法s
,返回类型r
和throws
子句t
在Object
中声明,除非具有相同签名的方法相同 返回类型,并且显式声明兼容的throws
子句 界面。
所以任何interface
都会获得这些方法。
对于Annotation
,设计人员只是选择在源代码中重新声明它们,以便记录它们的行为。