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

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

作者BLOGhttp://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

 

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

本文出自:冯立彬的博客



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值