本文主讲,利用反射模式调用接口的实现类、抽象类的继承子类。下面请听屌丝一一道来

1.第一步在src下创建 com.newer.reflex包

2.在com.newer.reflex包下面建立 IReflex接口,代码如下:
=============================-- start --==================================
package com.newer.reflex;

/**
 * 接口反射模式
 * @author RSun
 * @Date 2012-11-15上午10:07:21
 */
public interface IReflex {

public abstract void display(String str);

}
=============================-- end --==================================

3.在com.newer.reflex包下面建立 AbstractReflex.java抽象类,代码如下:
=============================-- start --==================================
package com.newer.reflex;

/**
 * 抽象类反射模式
 * @author RSun
 * @Date 2012-11-15上午10:05:34
 */
public abstract class AbstractReflex {

public abstract void display(String str);

public void show(){
System.out.println("AbstractReflex非抽象方法show()被调用..." + this.getClass());
}
}
=============================-- end --==================================

4.在com.newer.reflex包下面建立 A.java类, extends AbstractReflex 并实现 IReflex,代码如下:
=============================-- start --==================================
package com.newer.reflex;

/**
 * A
 * @author RSun
 * @Date 2012-11-15上午09:52:34
 */
public class A extends AbstractReflex implements IReflex {

@Override
public void display(String str) {
System.out.println("A类输出:" + str);
}

}
=============================-- end --==================================

5.在com.newer.reflex包下面建立 B.java类, extends AbstractReflex 并实现 IReflex,代码如下:
=============================-- start --==================================
package com.newer.reflex;

/**
 * B
 * @author RSun
 * @Date 2012-11-15上午09:56:05
 */
public class B extends AbstractReflex implements IReflex {

@Override
public void display(String str) {
System.out.println("B类输出:" + str);
}

}
=============================-- end --==================================

6.在com.newer.reflex包下面建立 反射调用工具类ReflexUtil.java类,代码如下:
=============================-- start --==================================
package com.newer.reflex;

import java.util.HashMap;
import java.util.Map;

/**
 * 反射调用工具类
 * @author RSun
 * @Date 2012-11-15上午09:52:18
 */
public class ReflexUtil {

/** A类 **/
public static final int TYPE_A = 1;
/** B类 **/
public static final int TYPE_B = 2;

// 为什么不使用常量?map是为了灵活的CRUD,也可以从数据库配置读取
public static Map<Integer,String> map = new HashMap<Integer,String>();
static{
map.put(TYPE_A, "com.newer.reflex.A");
map.put(TYPE_B, "com.newer.reflex.B");
}

public static AbstractReflex getAbstractReflex(int type){
String clazzName = map.get(type);
try {
return (AbstractReflex)Class.forName(clazzName).newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

public static IReflex getIReflex(int type){
String clazzName = map.get(type);
try {
return (IReflex)Class.forName(clazzName).newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

}
=============================-- end --==================================

7.在com.newer.reflex包下面建立 ReflexTest.java测试类,代码如下:
=============================-- start --==================================
package com.newer.reflex;

/**
 * java反射调用类
 * @author RSun
 * @Date 2012-11-15上午09:45:02
 */
public class ReflexTest {

public static void main(String[] args) {
AbstractReflex re = ReflexUtil.getAbstractReflex(ReflexUtil.TYPE_A);
re.display("调用的是继承类A吗?");
re.show();
System.out.println();

AbstractReflex reb = ReflexUtil.getAbstractReflex(ReflexUtil.TYPE_B);
reb.display("调用的是继承类B吗?");
reb.show();
System.out.println();

IReflex ire = ReflexUtil.getIReflex(ReflexUtil.TYPE_A);
ire.display("调用的是实现类A吗?");
System.out.println();

IReflex ireb = ReflexUtil.getIReflex(ReflexUtil.TYPE_B);
ireb.display("调用的是实现类B吗?");
}

}

=============================-- end --==================================

输出结果如下:

JAVA利用反射模式调用实现类相关推荐

  1. java反射出抽象类的实现类_java利用反射模式调用实现类

    本文主讲,java利用反射模式调用接口的实现类.抽象类的继承子类.下面请听一一道来 1.第一步在src下创建com.newer.reflex包 2.在com.newer.reflex包下面建立IRef ...

  2. Java利用反射动态加载类实战

    package com.web.common.utility.reflector; import java.io.Serializable; import java.lang.reflect.Cons ...

  3. Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码

    Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码 等有时间再慢慢写代码注释吧,先把源码放出来.文章最后有整个项目的压缩包. ps:拓展 Java 原生MySQL JDBC 插入后 ...

  4. C# 知识点笔记:IEnumerable的使用,利用反射动态调用方法

    IEnumerable<T>的使用 创建一个IEnumerable对象 List<string> fruits = new List<string> { " ...

  5. android利用反射调用截屏api,Android利用反射机制调用截屏方法和获取屏幕宽高的方法...

    想要在应用中进行截屏,可以直接调用 View 的 getDrawingCache 方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了. 还有一个方法可以调用系统隐藏的 screen ...

  6. java构造函数之间的调用–圆柱体类设计

    java构造函数之间的调用–圆柱体类设计 //构造函数之间的调用 import java.util.Arrays; import java.util.Scanner; class Cylinder{p ...

  7. (C#)利用反射动态调用类成员[转载]

    使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember(    string name ...

  8. 利用反射动态调用类成员C#

    使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember(    string name ...

  9. C# 利用反射动态调用类成员

    使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下: public object InvokeMember( string name, BindingFla ...

最新文章

  1. 删除链表中全部值为k的节点
  2. android nfcDemo
  3. SystemVerilog声明的位置
  4. C语言程序控制语句——while
  5. string相关库函数
  6. Java-类加载内存分析
  7. dj鲜生-通过邮箱发送加密的激活链接
  8. Qt 的udpSocket通信
  9. Mac解压Linux压缩.tar.gz文件
  10. 浅复制和深复制的区别?//浅拷贝和深拷贝
  11. 基于DKHadoop的智慧人社服务平台开发案例简述
  12. 阿里矢量图标库彩色图标(Symbol 引用)
  13. iOS应用支持IPV6,就那点事儿
  14. ajax传参中文乱码问题解决
  15. 【SPFA】【最短路】 腾讯大战360
  16. Mac清倒废纸篓提示“voicetrigger“在使用中
  17. miner配置文件详解
  18. MATLAB | 一文解决各类曲面交线绘制,包含三维隐函数曲面交线
  19. 【Markdown】Markdown 中的Flow flowchart.js 的基础教程
  20. 企业微服务治理的解决思路

热门文章

  1. 在CentOS 7上使用Tripwire监控和检测修改的文件
  2. LeetCode刷题(100)~唯一摩尔斯密码词
  3. 给小狗喂骨头,小狗会汪汪叫;给小猫喂食,小猫会喵喵叫。本案例要求编写一个程序模拟饲养员喂食动物的过程
  4. [附源码]计算机毕业设计Python+uniapp美团外卖微信菜价平台系统的设计与实现9t7op(程序+lw+远程部署)
  5. 利用STL解决二维数组过大内存溢出问题
  6. 梦想是什么,梦想在哪里,IT梦!
  7. 中望3D 2021“草图”之“使用先前平面”
  8. 第二本书:疯狂人类进化史20190625
  9. python向EXCEL添加一列数据或指定行列给单元格赋值
  10. 刷题-洛谷-P1319 压缩技术