代码之家  ›  专栏  ›  技术社区  ›  amit

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

  •  3
  • amit  · 技术社区  · 16 年前

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

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

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

    5 回复  |  直到 16 年前
        1
  •  9
  •   Glen Pierce    7 年前

    不,您必须使用工厂方法进行测试 A 如果你想这样做。类的客户机有权期望,如果他们这样做的话 new A() ,他们得到一个类的对象 ,没有别的。

        2
  •  5
  •   J0e3gan jfriend00    11 年前

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

        3
  •  4
  •   Andreas    16 年前

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

    public class A {
    
    private A(){ }
    
    public static A getInstance(){
         if (condition) 
            return new B();
         else 
            return new A();
    }
    
    }
    
    class B extends A {
    
    }
    
        4
  •  3
  •   Tadeusz Kopec for Ukraine yespbs    16 年前

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

        5
  •  1
  •   trshiv    16 年前

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

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