在java中调用动态构造函数?

时间:2013-10-24 20:05:12

标签: java inheritance subtyping

假设我有4个班级:ABSASB其中B extends ASB extends SA

A具有以下构造函数:

private SA a;
public A() {
   a = new SA();
}

显然,当我调用类B的构造函数时,B extends AA的构造函数也被调用。但在这种情况下我想要的 A的构造函数要a = new SB();而不是a = new SA();

有没有简单的方法可以做到这一点 更改AB的公共接口?

2 个答案:

答案 0 :(得分:5)

只需拥有public构造函数和protected构造函数:

private SA a;
public A() {
   this(new SA());
}
protected A(final SA a) {
   this.a = a;
}

然后在B

public B() {
   super(new SB());
}

答案 1 :(得分:0)

是的。例如:

public A(YourEnum en) {
    if (en == YourEnum.SA){
        a = new SA();
    } else {
        a = new SB();
    }
}

此外,取决于您真正需要的是,可以通过重载构造函数来完成

public A(){
    a = new SA();
}

public A(YourObjectYouNeed dataNeededForAnotherConstructor){
    //doing initialization stuff
    a = new SB();
}