JDK默认父类的注解不会被子类继承,要想被子类继承,需要在自定义注解加上 java.lang.annotation.Inherited型态的Annotation。
同时以下几个方面需要注意:
1)子类继承是一个父类的类型是一个类,而不是一个接口,在接口中定义的注解不会被子类继承,以下可证明
//注解类的定义: InheritedAnonation.java
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Inherited
//能通过反射读取
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritedAnonation
{
String value() default "MyAnnotation";
}
//接口类的定义:SuperClass.java
@InheritedAnonation
public interface SuperClass
{
}
//继承接口的子类定义:InhertiedChild.java
public class InhertiedChild implements SuperClass
{
}
//测试类的定义:TestInherited.java
import java.lang.reflect.Method;
public class TestInherited
{
public static void main(String[] args)throws SecurityException,NoSuchMethodException
{
Class<InhertiedChild> inheritedChild = InhertiedChild.class;
if(inheritedChild.isAnnotationPresent(InheritedAnonation.class))
{
System.out.println("It is inherited by subClass");
}
else
{
System.out.println("it doesn't existed in subClass");
}
}
}
运行以上代码:输出为:"it doesn't existed in subClass",知道如果接口定义注解,即使子类继承该接口,也不会存在接口中的注解
2)将父类定义为类,子类用extends关键字,即可输出:It is inherited by subClass。获得我们想要的结果
3)注解定义在方法上,一种情况是子类覆盖父类的方法,另一种情况是子类没有覆盖父类的方法,在这里只对第二种情况验证,
说明一下,当子类覆盖父类的方法时,父类方法上注解不会被子类继承,读者可自己去验证。
//自定义的注解类: InheritedAnonation.java
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritedAnonation
{
String value() default "MyAnnotation";
}
//父类的定义:SuperClass.java
public class SuperClass
{
@InheritedAnonation
public void sayHello()
{
}
}
//子类定义:InhertiedChild.java
public class InhertiedChild extends SuperClass
{
}
//测试类的定义
import java.lang.reflect.Method;
public class TestInherited {
public static void main(String[] args) throws SecurityException, NoSuchMethodException
{
Class<InhertiedChild> inheritedChild = InhertiedChild.class;
//通过反射根据名称获取相应的方法
Method method = inheritedChild.getMethod("sayHello", new Class[]{});
if(method.isAnnotationPresent(InheritedAnonation.class))
{
System.out.println("It is inherited by subClass method");
}
else
{
System.out.println("it doesn't existed in subClass method");
}
}
}
输出结果为:"It is inherited by subClass method”,证明该注解被子类方法继承
分享到:
相关推荐
Java 5引入的注解(Annotation)是一种元数据,它提供了在代码中嵌入信息的方式,这些信息可以被编译器、JVM或其他工具在编译时或运行时使用。注解可以用来简化代码,提高可维护性,并帮助工具进行静态分析。 1. ...
在Java编程语言中,注解(Annotation)是一种元数据,它提供了在代码中附加信息的能力,这些信息可以被编译器或运行时环境用来验证、处理或增强代码的行为。本篇我们将深入探讨“限定使用、文档、继承”这三个关键...
1. 元注解是用于注解其他注解的注解,比如`@Retention`, `@Target`, `@Documented`, `@Inherited`。 - `@Retention`:控制注解的生命周期,如`RetentionPolicy.SOURCE`只在源码保留,`RetentionPolicy.CLASS`编译...
元数据,在计算机科学中,是指用于描述数据的数据,它提供了关于数据本身的附加信息,有助于理解、解释和管理数据。在编程语境下,元数据主要指的是附加在代码元素(如类、方法、字段、构造器等)上的额外信息,这些...
- **@Inherited**:用来指定注解是否可以被子类继承。 #### 5. 实战应用 在实际开发中,自定义注解的应用非常广泛,例如: - **Spring框架**:Spring框架大量使用了注解来实现依赖注入、切面编程等功能。 - **JPA...
5. **元注解**:元注解是用于定义注解本身的注解,例如`@Target`定义注解能应用的程序元素类型,`@Retention`定义注解的保留策略,`@Documented`表明是否将注解包含在生成的Javadoc中,`@Inherited`表示子类是否自动...
Java 注解(Annotation)是Java语言的一个重要特性,它为代码提供元数据,即关于代码的信息,但这些信息不直接影响程序的运行。注解在Java中主要用于编译器检查、运行时处理、框架生成元数据等场景。本篇将深入探讨...
- **示例**:如果一个类上有 `@Inherited` 的 Annotation,则其子类会自动继承该 Annotation。 #### 四、内置标准 Annotation ##### 1. **@Override** - **定义**:用于标记重写方法。 - **用途**:帮助开发者识别...
元数据是关于数据的数据,它提供了额外的信息,但不直接影响程序的执行。注解在代码中以`@注解名`的形式出现,主要用于简化代码维护、增强代码可读性、自动化配置、运行时检查等功能。 1. **注解的类型与作用** - ...
java8 源码 Java注解 简介 由于无论在Java后台或者Android开发中我们经常遇到注解这个...通过@Target进行添加到注解中,说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Ann
元注解是用于注解其他注解的注解,如`@Retention`, `@Target`, `@Documented`, `@Inherited`。例如,`@Target`指定注解可以应用于哪些程序元素(类、方法等)。 ```java @Target(ElementType.METHOD) @Retention...
除了基本的元注解(如@Retention和@Target),还有一些预定义的注解,如`@Deprecated`用于标记已过时的API,`@Documented`指示应包含在Javadoc中,`@Inherited`使得子类继承父类的注解,`@Override`确保方法重写父类...
4. `@Inherited`:使子类继承父类的注解,但只适用于类,不适用于方法和字段。 5. `@Repeatable`:从Java 8开始引入,允许同一位置重复使用相同的注解。 六、实际应用 1. Spring框架:Spring大量使用注解进行依赖...
在Java Spring框架中,`AnnotationMetadata`是一个非常重要的接口,它允许我们获取关于类上的元数据信息,特别是关于注解的信息。在这个简单的使用例子中,我们将深入探讨如何使用`AnnotationMetadata`来解析类上的...
《Java Annotation手册》 在Java编程语言中,注解(Annotation)是一种元数据,它提供了在编译时或运行时处理代码的一种方式。通过注解,开发者可以向编译器或JVM提供有关代码的附加信息,而这些信息通常不直接影响...
5. **元注解**:元注解是用于定义注解本身的注解,如`@Target`、`@Retention`、`@Documented`和`@Inherited`。它们提供了对注解的进一步控制,如注解可以应用的位置、保留策略等。 6. **标准注解**:Java预定义的...
如是否存储在class文件或运行时可见)、`@Target`(指定Annotation可以应用到哪些程序元素上)、`@Documented`(表明Annotation应包含在生成的Javadoc中)和`@Inherited`(使子类继承父类的Annotation)等。...
Java注解,也称为 Annotation,是Java编程语言中的一种元数据机制,用于向编译器、JVM(Java虚拟机)或工具提供有关代码的信息。这些信息可以用来进行编译时检查、运行时处理,或者作为配置信息。注解不是程序的一...
- @Inherited:如果一个类被@Inherited注解,那么它的所有子类都将自动继承这个注解,但只有适用于类的注解才能被继承。 2. 注解定义:注解使用`@interface`关键字定义,并且通常包含一组成员,成员可以是基本类型...
5. 注解的元注解:学习@Retention、@Target、@Documented和@Inherited等元注解的作用。 6. 注解处理器:理解APT(Annotation Processing Tool)的工作原理,编写自定义注解处理器实现代码生成。 7. 在Spring框架中...