這是一個稍微復雜的注解類型. 它指明被注解的類會自動繼承. 更具體地說,如果定義注解時使用了 @Inherited 標記,然后用定義的注解來標注另一個父類, 父類又有一個子類(subclass),則父類的所有屬性將被繼承到它的子類中. 在示例7中,你會看到使用 @Inherited 標簽的好處.
Java注解的示例3
首先,定義你的注解:
@Inherited
public @interface MyParentObject {
boolean isInherited() default true;
String doSomething() default "Do what?";
}
接下來,使用注解標注了一個類:
@MyParentObject
public Class MyChildObject {
}
正如你看到的,你不需要在實現(xiàn)類中定義接口方法. 因為使用 @Inherited標記圈暗,這些都自動繼承了. 如果你使用一種古老的方式定義實現(xiàn)類,會是什么樣子呢? 看看下面這張 古老的實現(xiàn)方式吧:
public class MyChildObject implements MyParentObject {
public boolean isInherited() {
return false;
}
public String doSomething() {
return "";
}
public boolean equals(Object obj) {
return false;
}
public int hashCode() {
return 0;
}
public String toString() {
return "";
}
public Class annotationType() {
return null;
}
}
看到的區(qū)別嗎? 可以看到,你必須實現(xiàn)父接口的所有方法. 除了isInherited()和從myParentObject doSomething()方法外,你還需要實現(xiàn) java.lang.Object的 equals(),toString()和hasCode()方法. 還有 java.lang.annotation.Annotation 類的 annotationType()方法. 不管你是不是想要實現(xiàn)這些方法,你必須在繼承的對象中包含這些.