为什么我的继承了
还是显示子类的注解(包括方法)
parent
@Description(author = "denga", desc = "i am interface") public class Parent { public String name(){ return null; }; @Description(author = "denga", desc = "i am interface method") public int age(){ return 0; }; @Deprecated public void sing(){ }; }
@Description(author = "deng", desc = "I am class annotation") public class Child extends Parent { @Description(desc="i am name method annotation", author = "Deng") @Override //标识注解 public String name() { // TODO 自动生成的方法存根 return null; } @Override public int age() { // TODO 自动生成的方法存根 return 0; } @Override public void sing() { // TODO 自动生成的方法存根 System.out.println("i singing love"); } }
public class PareAnn { //1.使用加载器加载类 public static void main(String[] args) { Class c; try { c = Class.forName("com.smile.zhujie.Child"); //2.找到类上面的注解 boolean isExit=c.isAnnotationPresent(Description.class); if(isExit){ //3.拿到注解实例 Description d=(Description) c.getAnnotation(Description.class); System.out.println(d.author()); } //4.找到方法上的注解 Method[] ms =c.getMethods(); for (Method method : ms) { boolean isMExit=method.isAnnotationPresent(Description.class); if(isMExit){ //3.拿到注解实例 Description d=(Description) c.getAnnotation(Description.class); System.out.println(d.desc()); } } //另外的解析方法 for (Method method : ms) { Annotation [] as=method.getAnnotations(); for(Annotation a:as ){ if(a instanceof Description){ Description d=(Description)a; System.out.println(d.desc()); } } } } catch (ClassNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
父子类继承注解这块分两种情况,一个是注解定义了@Inherited,一个是没定义。在每种情况中又分类上的注解,子类实现父类抽象方法,继承了父类方法,覆盖了父类方法这四种情况,具体继承规则如下:
1. 编写自定义注解时未写@Inherited的运行结果:
子类的类上能否继承到父类的类上的注解? 否
子类方法,实现了父类上的抽象方法,这个方法能否继承到注解? 否
子类方法,继承了父类上的方法,这个方法能否继承到注解? 能
子类方法,覆盖了父类上的方法,这个方法能否继承到注解? 否
编写自定义注解时写了@Inherited的运行结果:
子类的类上能否继承到父类的类上的注解? 能
子类方法,实现了父类上的抽象方法,这个方法能否继承到注解? 否
子类方法,继承了父类上的方法,这个方法能否继承到注解? 能
子类方法,覆盖了父类上的方法,这个方法能否继承到注解? 否