【发布时间】:2013-10-24 20:05:11
【问题描述】:
假设我有 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 的公共接口?
【问题讨论】:
-
依赖注入! 不改变 A 和 B 的公共接口?不是真的。
-
@SotiriosDelimanolis 好的,如果您可以更改
A或B的公共接口,您会怎么做?什么是最简单的方法(更改较少)? -
使
A的构造函数接受SA参数。 -
为什么一定要调用
A的构造函数?只有在B的构造函数中调用super时才会发生这种情况。 -
@thatidiotguy Errr... No. JLS §8.8.7: 如果构造函数主体不是以显式构造函数调用开始并且被声明的构造函数不是原始类 Object 的一部分,那么构造函数体隐式地以超类构造函数调用“super();”开始
标签: java inheritance subtyping