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

标签 java inheritance subtyping

假设我有 4 个类:ABSASB,其中 B 扩展一个SB 扩展 SA

A 具有以下构造函数:

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

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

有没有简单的方法不用 更改 AB 的公共(public)接口(interface)?

最佳答案

只需要一个public构造函数和一个protected构造函数:

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

然后在 B 中:

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

关于java - 在java中调用动态构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19575560/

相关文章:

java - 带有请求参数的 header 引用者

java - XStream Java 对象到 XML 跳过一些字段

javascript - JavaScript 中的继承,我做对了吗?

Scala 泛型子类型参数

java - 我如何在java中读取多行文本,行与行之间有空格

java - 禁止 System.in 到 System.out(提示输入密码)

java - 当类型参数是参数化类型时的子类型化

scala - @uncheckedVariance 在 Kotlin 中?

c++ - 指向派生类对象的基类指针类型

ruby - 如何找到 "essential"方法来提供 Ruby mixins 的接口(interface)?