4

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

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

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

4

5 回答 5

9

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

于 2009-10-01T04:52:00.703 回答
5

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

于 2009-10-01T04:47:46.063 回答
4

您不能在构造函数中执行此操作,但可以执行以下操作:

public class A {

private A(){ }

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

}

class B extends A {

}
于 2009-10-01T08:38:50.997 回答
3

当构造函数代码被调用时,对象已经被创建——你只是在初始化它的字段。所以修改对象的类为时已晚。

于 2009-10-01T10:04:30.323 回答
1

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

在您的情况下,使用工厂方法是最好的方法。

于 2009-10-01T08:23:11.353 回答