java反射出抽象类的实现类_java利⽤反射模式调⽤实现类本⽂主讲,java利⽤反射模式调⽤接⼝的实现类、抽象类的继承⼦类。下⾯请听⼀⼀道来
1.第⼀步在src下创建flex包
2.在flex包下⾯建⽴IReflex接⼝,代码如下:
=============================-- start --==================================
flex;
/**
* 接⼝反射模式
* @author RSun
* @Date 2012-11-15上午10:07:21
*/
public interface IReflex {
public abstract void display(String str);
} //www.sctarena
=============================-- end --==================================
3.在flex包下⾯建⽴AbstractReflex.java抽象类,代码如下:
=============================-- start --==================================
flex;
/**
* 抽象类反射模式
* @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()被调⽤..." + Class());
}
}
=============================-- end --==================================
4.在flex包下⾯建⽴A.java类,extends AbstractReflex 并实现 IReflex,代码如下:
=============================-- start --==================================
flex;
/**
* 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.在flex包下⾯建⽴B.java类,extends AbstractReflex 并实现 IReflex,代码如下:
=============================-- start --================================== flex;
/**
* 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.在flex包下⾯建⽴反射调⽤⼯具类ReflexUtil.java类,代码如下:
=============================-- start --================================== flex;
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, "flex.A");
map.put(TYPE_B, "flex.B");
}
public static AbstractReflex getAbstractReflex(int type){
String clazzName = (type);
try {
return (AbstractReflex)Class.forName(clazzName).newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static IReflex getIReflex(int type){
String clazzName = (type);
try {
return (IReflex)Class.forName(clazzName).newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
=============================-- end --================================== 7.在flex包下⾯建⽴ReflexTest.java测试类,代码如下:
=============================-- start --================================== flex;
/**
* java反射调⽤类
* @author RSun
* @Date 2012-11-15上午09:45:02
*/
public class ReflexTest {
public static void main(String[] args) {
AbstractReflex re = AbstractReflex(ReflexUtil.TYPE_A);
re.display("调⽤的是继承类A吗?");
re.show();
System.out.println();
AbstractReflex reb = AbstractReflex(ReflexUtil.TYPE_B);
reb.display("调⽤的是继承类B吗?");
reb.show();
System.out.println();
IReflex ire = IReflex(ReflexUtil.TYPE_A);
ire.display("调⽤的是实现类A吗?");
System.out.println();
IReflex ireb = IReflex(ReflexUtil.TYPE_B);
ireb.display("调⽤的是实现类B吗?");
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。