【发布时间】:2012-06-05 06:27:24
【问题描述】:
可以在没有子类名的情况下从父类实例化子对象。
例如,我有下一节课:
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”,我也不会编写静态方法来初始化它,所有孩子都有相同的构造函数。我不能从父级创建子实例是很大的不足。
【问题讨论】:
-
如果您在编译时不知道所有可能的子类,那么您需要一种方法在运行时弄清楚这一点。就目前而言,您所要求的似乎有点尴尬。您能否提供更多有关您遇到的问题的信息?
-
我只需要编写超类静态方法,该方法将调用子类的构造函数,从中调用该静态方法。我认为,实现它的唯一方法是调用 getStackTrace() ftom Thread 并使用反射创建实例。但它的方式非常复杂。也许我可以简单地意识到它?
-
调用 A1.getObject() 时,在堆栈跟踪中找不到对 A1 的引用。
-
阿列克谢·凯戈罗多夫,Я понял。 И что, получается нет способов?
-
Nik,请尝试用英文发表评论。每个人都很容易理解你。未来的访问者可以通过这种方式轻松地从您的问题中学习。
标签: java class inheritance reflection instance