假设我有4个班级:A
,B
,SA
和SB
其中B extends A
和SB extends SA
。
类A
具有以下构造函数:
private SA a;
public A() {
a = new SA();
}
显然,当我调用类B
的构造函数时,B extends A
类A
的构造函数也被调用。但在这种情况下我想要的
A
的构造函数要a = new SB();
而不是a = new SA();
。
有没有简单的方法可以做到这一点
更改A
和B
的公共接口?
答案 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();
}