查了一些资料后,自己做的练习,留个底
练习 Inherited,子类对父类注解的继承,父类的注解有标注Inherited后,子类可以获取父类中对类的注解需要注意的是如果子类重写了父类的方法,就无法获取父类方法中的注解了,注解也作为了方法的一部分被覆盖了
package exe.zyx.annotaion.inherited;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface TestInherited {
public String value();
}
package exe.zyx.annotaion.inherited;
@TestInherited("parent class")
public class Parent {
@TestInherited("parent method")
public void publicM(){
System.out.println("Parent.publicM()");
}
}
package exe.zyx.annotaion.inherited;
public class Sub extends Parent {
//@Override
public void publicM1(){
System.out.println("Sub.publicM()");
}
}
package exe.zyx.annotaion.inherited;
import java.lang.reflect.Method;
public class TestMain {
public static void main(String[] args) throws Exception {
classTest();
methodTest();
}
private static void methodTest() throws Exception {
Class<Sub> subClass = Sub.class;
Method method = subClass.getMethod("publicM", new Class[]{});
if (method.isAnnotationPresent(TestInherited.class)) {
TestInherited test = method.getAnnotation(TestInherited.class);
System.out.println("methodTest:" + test.value());
}
}
private static void classTest() {
Class<Sub> subClass = Sub.class;
if (subClass.isAnnotationPresent(TestInherited.class)) {
TestInherited test = subClass.getAnnotation(TestInherited.class);
System.out.println("classTest:" + test.value());
}
}
}