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

ins*_*ity 1 java inheritance subtyping

假设我有4类:A,B,SASB其中B extends ASB extends SA.

A具有以下构造函数:

private SA a;
public A() {
   a = new SA();
}
Run Code Online (Sandbox Code Playgroud)

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

有一个简单的方法来做到这一点没有改变双方的公共接口AB

Bor*_*der 5

只需要一个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)

  • @foobar nope,`protected`的全部内容是可以通过另一个包中的子类访问.看看[this](http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html). (2认同)