如果Annotation是一个接口,那么它如何扩展Object类?

Aam*_*mir 11 java annotations

我们将注释定义为接口,如下所示

@interface annot_name {

}
Run Code Online (Sandbox Code Playgroud)

我们知道所有注释都java.lang.annotation.Annotation默认扩展接口.

当我检查java库的Annotation接口时,我发现它覆盖了许多Object类的方法,比如hashCode()等.

如果Annotation是一个接口,那么它如何扩展Object类并覆盖其方法呢?接口只能扩展其他接口而不能扩展类.

Sot*_*lis 18

所以我的问题是,如果Annotation是一个接口,那么它如何扩展Object类并覆盖其方法

不完全是.Java语言规范§9.2说

如果接口没有直接的超接口,那么接口隐式声明一个public abstract成员方法m,该方法具有签名 s,返回类型rthrows子句,t对应于每个具有签名,返回类型和 声明的子句的public 实例方法,除非具有相同签名的方法,相同的返回type,并且接口显式声明兼容子句.msrthrowstObjectthrows

所以任何interface获得这些方法.

因为Annotation,设计人员只是选择在源代码中重新声明它们,以便记录它们的行为.

  • 我可以得到关于downvote的解释吗? (3认同)