Java构造函数可以构造子类的对象吗?
有没有办法修改构造函数中正在构造的类Java构造函数可以构造子类的对象吗?,java,factory,Java,Factory,有没有办法修改构造函数中正在构造的类 public class A { A() { //if (condition) return object of type B //else return A itself } } public class B extends A { } 基本上,我想使用基类构造函数作为工厂方法。在java中可能吗?不,构造函数只会实例化它们所表示的类的对象。这就是构造函数中没有指定返回值的原因。否,如果要执行此操作,您必须对a使用工厂方法。类的客
public class A {
A() {
//if (condition) return object of type B
//else return A itself
}
}
public class B extends A { }
基本上,我想使用基类构造函数作为工厂方法。在java中可能吗?不,构造函数只会实例化它们所表示的类的对象。这就是构造函数中没有指定返回值的原因。否,如果要执行此操作,您必须对
a
使用工厂方法。类的客户机有权期望,如果他们执行了newa()
,他们将获得类a
的对象,而不是其他对象。您可以尝试使用反射来实例化子类。然而,这是一个坏主意,因为类不应该知道它的子类
在您的情况下,使用工厂方法是最好的方法。您不能在构造函数中执行此操作,但可以执行以下操作:
public class A {
private A(){ }
public static A getInstance(){
if (condition)
return new B();
else
return new A();
}
}
class B extends A {
}
当调用构造函数代码时,对象已经创建-您只是初始化它的字段。所以现在修改对象的类已经太迟了。在其他一些语言中,这是可能的。当用户创建新的A()时,他也可以得到A的子类型。所以从概念上来说,我看不出有什么问题。尽管如此,这是Java中的期望值。构造函数不会返回值