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

本文通过一个实例介绍了如何使用Java反射机制动态调用接口的实现类和抽象类的子类,详细展示了从创建接口、抽象类到实现类的代码,并提供了反射调用工具类和测试类。
摘要由CSDN通过智能技术生成

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

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);

} //www.sctarena.com

=============================-- 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 map = new HashMap();

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吗?");

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值