A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨鹏鹏 中级黑马   /  2012-8-24 19:08  /  1554 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有一个父类,里面有个方法被加上注解;有一子类继承这父类,同时重写父类的方法。
为什么 方法的注解并没有被继承?

2 个回复

倒序浏览
在默认的情况下,父类上的注解并不会被子类继承。如果要让这个注解可以被子类上继承,就必须给这个注解类型定义上添加Inherited注解
回复 使用道具 举报
包 java.lang.annotation。所有注解继承自接口java.lang.annotation.Annotation,并且是自动继承,不需要定义时指定。
该包同时定义了 四个元注解,Documented,Inherited,Target(作用范围,方法,属性,构造方法等),Retention(生命范围,源代码,class,runtime)
Inherited: 在您定义Annotation型态后并使用于程序代码上时,预设上父类别中的Annotation并不会被继承至子类别中,您可以在定义 Annotation时
加上java.lang.annotation.Inherited的Annotation,这让您定义的Annotation型别被继承下来。注意注解继承只针对class 级别注解有效
例如:
package onlyfun.caterpillar;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Inherited;
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Debug {
String value();
String name();
}
在下面这个程序中使用它:
package onlyfun.caterpillar;
@Debug( value = "unit", name = "debug1" ) //该注解可以被子类读取到
public class SomeObject {
@Debug( value = "unit", name = "debug1" ) //子类如果重写该方法,将不继承该注解
public void doSomething() { // .... }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马