父类中调用子类构造函数实例化子类的实现

来源:互联网 发布:解压软件 360 编辑:程序博客网 时间:2024/06/05 18:09

父类中调用子类构造函数实例化子类的实现

作者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
 

 

这是针对父类中有非默认构造函数的一种实现,如果是父类中只有默认构造函数,那处理要相对简单得多,不需要构造函数及调用,只需要简单的反射操作即可。