父类中调用子类构造函数实例化子类的实现
作者BLOG:http://blog.csdn.net/fenglibing
通过在父类中调用子类的构造函数,达到初化使化子类的目的,并取得子类的返回对象。
父类的JAVA实现类:
package test4; import java.lang.reflect.Constructor; /** * 类说明:通过父类调用子类中的构造函数,将当前父类中的参数通过构造函数传递给子类,便于子类做相关的初使化操作。 */ public abstract class Parent { String name; int age; protected Parent(String name,int age){ this.name=name; this.age=age; print(); } /** * 获取父类的子类对象 * @return 子类对象 */ public static Parent getInstance(){ Parent parent=null; try { String name="张三"; int age=20; /*子类*/ Class cclass=Class.forName("test4.Child"); /*构造函数需要的参数*/ Class[] types = new Class[] {String.class,int.class }; /*获取构造函数对象*/ Constructor constructor = cclass.getConstructor(types); if (constructor == null) return null; //调用指定对象的构造方法,并返回 parent=(Parent) constructor.newInstance(new Object[]{name, age}); System.out.println(parent.getClass()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return parent; } /*简单的打印函数,以便观察输出*/ public void print(){ System.out.println("This is partent."); } } |
示例子类:
package test4; /** * 类说明:示例子类 */ public class Child extends Parent { public Child(String name,int age) { super(name,age); System.out.println("child:name--"+name+":age---"+age); } /*简单的打印函数,以便观察输出*/ public void print(){ System.out.println("This is Child."); } } |
调用示例类:
package test4; /** * 类说明:调用示例 */ public class Caller { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Parent parent=Parent.getInstance(); } } |
运行子类,结果如下:
This is Child. 实例化子类:child:name--张三:age---20 被调用的类:class test4.Child |
这是针对父类中有非默认构造函数的一种实现,如果是父类中只有默认构造函数,那处理要相对简单得多,不需要构造函数及调用,只需要简单的反射操作即可。
本文出自:冯立彬的博客