1

假设我有 4 个类 :AB和whereSA和。SBB extends ASB extends SA

A具有以下构造函数:

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

显然,当我调用类的构造B函数B extends A 时,A也调用了类的构造函数。但在这种情况下,我希望构造函数Ato doa = new SB();而不是a = new SA();.

有没有一种简单的方法可以在不改变和的公共接口的情况下做到这A一点B

4

2 回答 2

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());
}
于 2013-10-24T20:10:39.147 回答
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();
}
于 2013-10-24T20:10:07.630 回答