Java 从父类实例化子类

Java 从父类实例化子类,java,class,inheritance,reflection,instance,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 e

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

例如,我有以下课程:

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()方法写入其中,因为它创建了一个类childs instances

PS:


我只需要初始化子类对象,但是有大量的子类,我不想为所有的子类调用“new”,也不想编写静态方法来初始化它,而且,所有的子类都有相同的构造函数。我无法从父实例创建子实例,这是一个很大的缺陷。

当您编写
A A=A1.getObject()时,
您确实使用了子类名称(A1)。
因此a)你的问题具有误导性,并且
b) 为什么你不能直接编写
A=new A1()

如果要编写
A1.getObject()
,则可以在类A1中重新定义
getObject()

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

}

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

如果在编译时不知道所有可能的子类,那么需要一种在运行时解决这个问题的方法。目前看来,你的要求似乎有点尴尬。您能提供一些关于您遇到的问题的更多信息吗?我只需要编写超类静态方法,它将调用子类的构造函数,从这个子类调用这个静态方法。我认为,实现它的唯一方法是调用getStackTrace()ftom线程并使用反射创建实例。但这是一种非常复杂的方式。也许我可以简单地实现它?当调用A1.getObject()时,在堆栈跟踪中找不到对A1的引用。Alexei Kaigorodov,ЯПЯ。尼科,请用英语评论。每个人都很容易理解你。未来的访问者可以通过这种方式很容易地从您的问题中学习。为什么不使用反射来实例化cззззззззззжзз-зззззззззз。зззззз,чззззззA.getObject(),зA1.getObject()?
public class A1 extends A {
   public static A getObject() {
     return new A1();
   }

}