我们将注释定义为接口,如下所示
@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,返回类型r和throws子句,t对应于每个具有签名,返回类型和 声明的子句的public实例方法,除非具有相同签名的方法,相同的返回type,并且接口显式声明兼容子句.msrthrowstObjectthrows
所以任何interface获得这些方法.
因为Annotation,设计人员只是选择在源代码中重新声明它们,以便记录它们的行为.