子实例从父类实例化

时间:2012-06-05 06:27:24

标签: java class inheritance reflection instance

可以从没有子类名的父类实例化子对象。

例如,我有下一个课程:

public class A {
   protected int a;

   public A1() {
       a = 0;
   }

   public int getA() {
       return a;
   }

   public static A getObject() {
       // some code which I need to write
   }
}

public class A1 extends A {
    public A1() {
        a = 5;
    }
}

public class A2 extends A {
    public A2() {
        a = 10;
    }
}

用法示例:

A a = A1.getObject();
a.getA(); // return 5

a = A2.getObject();
a.getA(); // return 10

a = A.getObject();
a.getA(); // return 0

A1,A2并非所有儿童类。可能有无限数量。

如何编写getObject()方法来创建A类子实例。

PS:

我只需要初始化子类对象,但是有大量的子类,我不会为所有这些类调用“new”,我也不会编写静态方法来初始化它,所有孩子都有相同的构造者。我无法从父母创建子实例。

2 个答案:

答案 0 :(得分:2)

当你写A a = A1.getObject()时, 你使用子类名(A1)。 所以a)你的问题是误导性的 b)为什么你不能只写A a = new A1()

如果您想写A1.getObject(),那么您可以在A1级重新定义getObject()

public class A1 extends A {
   public static A getObject() {
     return new A1();
   }

}

如果没有重新定义,就无法在类A中声明getObject(),以便它返回不同类的对象,因为A a = A1.getObject()将编译为A a = A.getObject()

答案 1 :(得分:0)

class A
{
   protected int a;

   public A()
   {
       a = 0;
   }

   public int getA()
   {
       return a;
   }

   public static A getObject(Class c) throws Exception
   {
        A obj = (A)c.newInstance();
    return obj;     
   }
}

class A1 extends A
{
    public A1()
    {
        a = 5;
    }
}

class A2 extends A
{
    public A2()
    {
        a = 10;
    }
}
class Test{
    public static void main(String args[]) throws Exception
    {
        A a = A1.getObject(A1.class);
        System.out.println(a.getA()); // return 5

        a = A2.getObject(A2.class);
        System.out.println(a.getA()); // return 10

        a = A.getObject(A.class);
        System.out.println(a.getA()); // return 0
    }
}