父类中调用子类构造函数实例化子类的实现
作者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
这是针对父类中有非默认构造函数的一种实现,如果是父类中只有默认构造函数,那处理要相对简单得多,不需要构造函数及调用,只需要简单的反射操作即可。