ins*_*ity 1 java inheritance subtyping
假设我有4类:A,B,SA和SB其中B extends A
和SB extends SA.
类A具有以下构造函数:
private SA a;
public A() {
a = new SA();
}
Run Code Online (Sandbox Code Playgroud)
显然,当我为类调用构造
函数时B,因为类的构造B extends A函数A也被调用.但在这种情况下,我想的构造A做a = new SB();的,而不是a = new SA();.
有一个简单的方法来做到这一点没有改变双方的公共接口A和B?
只需要一个public构造函数和一个protected构造函数:
private SA a;
public A() {
this(new SA());
}
protected A(final SA a) {
this.a = a;
}
Run Code Online (Sandbox Code Playgroud)
然后在B:
public B() {
super(new SB());
}
Run Code Online (Sandbox Code Playgroud)