- 浏览: 155740 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
bkk854762363:
好文章,赞
Spring3.0 + 自定义注解实现操作日志记录功能 -
怪黍叔:
学习了
Spring3.0 + 自定义注解实现操作日志记录功能 -
wellway:
请问jfreechart-1.0.11-demo.jar怎么反 ...
关于JFreeChart Demo
不了解注解基础知识的请先看《JDK 5 Annotation\注解\注释\自定义注解》
子类可以继承到父类上的注解吗?
-----------------------------------------------------------------
我们知道在编写自定义注解时,可以通过指定@Inherited注解,指明自定义注解是否可以被继承。但实现情况又可细分为多种。
测试环境如下:
-----------------------------------------------------------------
父类的类上和方法上有自定义的注解--MyAnnotation
子类继承了这个父类,分别:
子类方法,实现了父类上的抽象方法
子类方法,继承了父类上的方法
子类方法,覆盖了父类上的方法
MyAnnotation自定义注解
-----------------------------------------------------------------
- package test.annotation;
- import java.lang.annotation.Inherited;
- import java.lang.annotation.Retention;
- /**
- * 自定义注解
- */
- //@Inherited //可以被继承
- @Retention (java.lang.annotation.RetentionPolicy.RUNTIME) //可以通过反射读取注解
- public @interface MyAnnotation {
- String value();
- }
父类
-----------------------------------------------------------------
- package test.annotation;
- @MyAnnotation (value = "类名上的注解" )
- public abstract class ParentClass {
- @MyAnnotation (value = "父类的abstractMethod方法" )
- public abstract void abstractMethod();
- @MyAnnotation (value = "父类的doExtends方法" )
- public void doExtends() {
- System.out.println(" ParentClass doExtends ..." );
- }
- @MyAnnotation (value = "父类的doHandle方法" )
- public void doHandle(){
- System.out.println(" ParentClass doHandle ..." );
- }
- }
子类
-----------------------------------------------------------------
- package test.annotation;
- public class SubClass extends ParentClass{
- //子类实现父类的抽象方法
- @Override
- public void abstractMethod() {
- System.out.println("子类实现父类的abstractMethod抽象方法" );
- }
- //子类继承父类的doExtends方法
- //子类覆盖父类的doHandle方法
- @Override
- public void doHandle(){
- System.out.println("子类覆盖父类的doHandle方法" );
- }
- }
测试类
-----------------------------------------------------------------
- package test.annotation;
- import java.lang.reflect.Method;
- public class MainTest {
- public static void main(String[] args) throws SecurityException,
- NoSuchMethodException {
- Class<SubClass> clazz = SubClass.class ;
- if (clazz.isAnnotationPresent(MyAnnotation. class )) {
- MyAnnotation cla = clazz
- .getAnnotation(MyAnnotation.class );
- System.out.println("子类继承到父类类上Annotation,其信息如下:" +cla.value());
- } else {
- System.out.println("子类没有继承到父类类上Annotation" );
- }
- // 实现抽象方法测试
- Method method = clazz.getMethod("abstractMethod" , new Class[] {});
- if (method.isAnnotationPresent(MyAnnotation. class )) {
- MyAnnotation ma = method
- .getAnnotation(MyAnnotation.class );
- System.out.println("子类实现父类的abstractMethod抽象方法,继承到父类抽象方法中的Annotation,其信息如下:" +ma.value());
- } else {
- System.out.println("子类实现父类的abstractMethod抽象方法,没有继承到父类抽象方法中的Annotation" );
- }
- //覆盖测试
- Method methodOverride = clazz.getMethod("doExtends" , new Class[] {});
- if (methodOverride.isAnnotationPresent(MyAnnotation. class )) {
- MyAnnotation ma = methodOverride
- .getAnnotation(MyAnnotation.class );
- System.out
- .println("子类继承父类的doExtends方法,继承到父类doExtends方法中的Annotation,其信息如下:" +ma.value());
- } else {
- System.out.println("子类继承父类的doExtends方法,没有继承到父类doExtends方法中的Annotation" );
- }
- //继承测试
- Method method3 = clazz.getMethod("doHandle" , new Class[] {});
- if (method3.isAnnotationPresent(MyAnnotation. class )) {
- MyAnnotation ma = method3
- .getAnnotation(MyAnnotation.class );
- System.out
- .println("子类覆盖父类的doHandle方法,继承到父类doHandle方法中的Annotation,其信息如下:" +ma.value());
- } else {
- System.out.println("子类覆盖父类的doHandle方法,没有继承到父类doHandle方法中的Annotation" );
- }
- }
- }
编写自定义注解时未写@Inherited的运行结果
-----------------------------------------------------------------
子类没有继承到父类类上Annotation
子类实现父类的abstractMethod抽象方法,没有继承到父类抽象方法中的Annotation
子类继承父类的doExtends方法,继承到父类doExtends方法中的Annotation,其信息如下:父类的doExtends方法
子类覆盖父类的doHandle方法,没有继承到父类doHandle方法中的Annotation
编写自定义注解时写了@Inherited的运行结果
-----------------------------------------------------------------
子类继承到父类类上Annotation,其信息如下:类名上的注解
子类实现父类的abstractMethod抽象方法,没有继承到父类抽象方法中的Annotation
子类继承父类的doExtends方法,继承到父类doExtends方法中的Annotation,其信息如下:父类的doExtends方法
子类覆盖父类的doHandle方法,没有继承到父类doHandle方法中的Annotation
结论
-----------------------------------------------------------------
父类的类上和方法上有自定义的注解,
子类继承了这个父类,的情况下。
编写自定义注解时未写@Inherited的运行结果: | 编写自定义注解时写了@Inherited的运行结果: | |
子类的类上能否继承到父类的类上的注解? | 否 | 能 |
子类方法,实现了父类上的抽象方法,这个方法能否继承到注解? | 否 | 否 |
子类方法,继承了父类上的方法,这个方法能否继承到注解? | 能 | 能 |
子类方法,覆盖了父类上的方法,这个方法能否继承到注解? | 否 | 否 |
我们知道在编写自定义注解时,可以通过指定@Inherited注解,指明自定义注解是否可以被继承。
通过测试结果来看,@Inherited 只是可控制 对类名上注解是否可以被继承。不能控制方法上的注解是否可以被继承。
附注
-----------------------------------------------------------------
Spring 实现事务的注解@Transactional 是可以被继承的,
通过查看它的源码可以看到@Inherited。
发表评论
-
JDK 5 Annotation\注解\注释\自定义注解
2012-11-12 17:06 1475自定义注解示例 ------ ... -
Java基础知识点梳理
2012-10-16 10:50 1127... -
String考点
2012-10-08 10:37 8511.String StringBuffer StringBui ... -
抽取网页数据的不同思路
2012-09-27 18:52 0客户要求从Internet上的网页上抽取一定的数据,用来显示或 ... -
使用TransactionTemplate 编程式控制事务
2012-09-27 17:10 27904使用 TransactionTempla ... -
Java编程中的性能优化手段
2012-09-26 15:35 10151.尽量使用final修饰符。 带有final修饰符的类是不 ... -
java 异常处理
2012-09-26 15:32 9101.异常处理的流程: ① 遇到错误,方法立即结束,并不返回一个 ... -
灵活自定义缩略图片尺寸大小方案分享(nginx,lua_nginx,GraphicsMagick)
2012-07-11 12:27 3113melin 写道 在开发电子商务网站时,同一个图片需要不 ... -
jmagic 的安装与使用
2012-03-25 08:59 1651平台:winXP 1. 安装Imag ... -
单例模式
2012-03-25 08:45 1162饿汉式: package com.design.pat ... -
判断滚动条已经滚动到底部 方法收集
2011-10-17 14:17 32761.window.onscroll=function() { ... -
Spring3.0 + 自定义注解实现操作日志记录功能
2011-06-07 18:08 6326Xml代码 <aop:aspectj-autop ... -
如何在HttpServletRequest上下文环境中判断请求是同步请求还是异步请求
2011-05-05 15:01 1980在Java后台,有时候我们需要根据同步请求和异步请求做个性 ... -
跨应用程序的session共享
2010-09-30 12:36 1854常常有这样的情况,一个大项目被分割成若干小项目开发,为了能够互 ... -
Java的垃圾回收机制详解和调优
2010-09-30 11:21 9601.JVM的gc概述 gc即 ... -
sso单点登陆学习
2010-09-30 10:43 1734我对于一个新的内容学习.一般先知道其作用和特点是什么.然后从网 ... -
单点登录系统的设计与实现方案
2010-09-30 09:26 1582目的: 对目前已有的 Web 应用系统,和将来待开发的 Web ...
相关推荐
有关子类和父类。A是子类,Teacher是父类。A是Teacher 的一种(子类)会继承父类李非私
java 子类对象赋值给父类对象的使用,包括代码及详解,个人笔记
如果一个类继承一个父类,那么子类会拥有父类所规定的所以成员 子类还可以拥有父类没有的独有成员 父类可以完成的任务,子类对象也可以完成 子类可以调用父类Person p= new student(); 声明父类变量,实例化子类...
在本文里我们给大家分享一篇关于Python 子类继承父类构造函数的相关知识点内容,需要的朋友们跟着学习下。
父类赋值给子类的一个小方法,仅供学习参考...
利用C#反射将子类舍弃多余的属性转换为父类,用途比较少。
继承语法:class 类名(父类名):子类继承自父类,可以享受父类中已经封装好的方法,不需要再次定义子类中应该根据职责,封装子类特有的属性和方法。语法格式:cl
NULL 博文链接:https://fuckdkjlfsaene.iteye.com/blog/767245
NULL 博文链接:https://2528.iteye.com/blog/1523901
c++里,指针和引用是很重要的概念,这个程序不仅对指针和引用做了说明、使用,而且对子类不能继承父类虚函数也做了说明。
程序中描述了子类对象构建调用父类的构造方法,以及类变量和实例变量创建的不同过程
java中的继承(子类调用父类构造方法还不懂).doc
JAVA 子类继承父类范例,2个子类继承同一个父类,完整代码,下载粘贴到project中可以直接运行
论JAVA继承机制中父类与子类的关系
java训练题目 编写程序实现子类对父类构造方法的引用?
WPF继承_子类继承父类,实现跨类调用方法
最近对将子类对象赋值给父类对象有点心得,想和大家分享一下.但本人水平有限,请各位指正和批评. 言归正传,下面是几个小例子,请大家看一看. 测试一 父类: public class Supclass { public void print() { ...
如果子类和父类不在同一个包中,那么子类继承了父类的protected、public成员变量作为子类的成员变量,并且继承了父类的protected、public方法,继承的成员或方法的访问权限保持不变,但子类不能继承父类的友好...
在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。 子类不能继承父类的构造方法。 子类通常比父类的功能更多(子类更具体,父类更通用) 在Java 中,继承的关键字用的是“extends”,即子类不是...