Java构造函数可以构造子类的对象吗?

时间:2009-10-01 04:45:12

标签: java factory

有没有办法修改构造函数中构造的类?

public class A {
  A() {
    //if (condition) return object of type B
    //else return A itself
  }
}
public class B extends A { }

基本上我想使用基类构造函数作为工厂方法。在java中可以吗?

5 个答案:

答案 0 :(得分:9)

不,如果你想这样做,你必须使用A的工厂方法。您班级的客户有权期望,如果他new A(),他会获得班级A的对象,而不是其他人。

答案 1 :(得分:5)

不,构造函数只会实例化它们所代表的类的对象。这就是构造函数中没有指定返回值的原因。

答案 2 :(得分:2)

你不能在构造函数中执行它,但你可以这样做:

public class A {

private A(){ }

public static A getInstance(){
     if (condition) 
        return new B();
     else 
        return new A();
}

}

class B extends A {

}

答案 3 :(得分:2)

当调用构造函数代码时,已经创建了对象 - 您只是初始化其字段。所以修改对象的类已经太晚了。

答案 4 :(得分:1)

您可以尝试使用反射来实例化子类。然而,这是一个坏主意,因为一个类不应该知道它的子类。

使用工厂方法是您的最佳方法。