可以从没有子类名的父类实例化子对象。
例如,我有下一个课程:
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”,我也不会编写静态方法来初始化它,所有孩子都有相同的构造者。我无法从父母创建子实例。
答案 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
}
}