谋士张良
2015-07-28 00:06
为什么我的继承了
还是显示子类的注解(包括方法)
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的运行结果:
子类的类上能否继承到父类的类上的注解? 能
子类方法,实现了父类上的抽象方法,这个方法能否继承到注解? 否
子类方法,继承了父类上的方法,这个方法能否继承到注解? 能
子类方法,覆盖了父类上的方法,这个方法能否继承到注解? 否
全面解析Java注解
127293 学习 · 111 问题
相似问题