Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java构造函数可以构造子类的对象吗?_Java_Factory - Fatal编程技术网

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中的期望值。构造函数不会返回值