其他继承类中的继承类
问题描述:
我在Java中有继承问题。我会用军例如: 我有一个阶级基础:其他继承类中的继承类
public class Soldier {
Squad squad;
public Soldier(Squad _squad) {
squad = _squad;
}
//and some methods, that use squad
}
,我有:
public class Archer extends Soldier {
public Archer(ArcherSquad _squad) {
super(_squad);
}
//some new methods, some override
}
和:
public class Warrior extends Soldier {
public Warrior(WarriorSquad _squad) {
super(_squad);
}
//some new methods, some override
}
和我的小队样子:
Squad;
ArcherSquad extends Squad(some new methods);
WarriorSquad extends Squad(some new methods);
现在我想访问来自Archer
的ArcherSquad
中的方法。我如何更改代码而不用处理任何事情?
答
您可以移动参照阵容多达ArcherSquad
public abstract class Soldier {
// force subclass supply some squad
protected abstract Squad getSquad();
public void someMethod() {
Squad squad = getSquad();
// do something with it.
}
}
public class Archer extends Soldier {
private ArcherSquad archerSquad;
public Archer(ArcherSquad _squad) {
archerSquad = _squad;
}
@Override
protected Squad getSquad() {
return archerSquad;
}
...
}
,或者你可以把Soldier
成一个通用类
public class Soldier<T extends Squad> {
protected T squad;
public Soldier(T _squad) {
this.squad = _squad;
}
public void someMethod() {
Squad squad = this.squad;
// do something with it.
}
}
public class Archer extends Soldier<ArcherSquad> {
public Archer(ArcherSquad _squad) {
super(_squad);
}
public void someMethodUsingArcherSquad() {
ArcherSquad as = squad;
}
// some new methods, some override
}
这很难说什么问题,您正在运行之中。你可以说得更详细点吗?你能展示你试图打电话但不能办的方法吗? – kuporific
我发现的唯一的小故障是,你正在接受_squad作为参数,并且将super(班)而不是超级(_squad)给超类构造函数。由于Archersquad是小队的一个子类,你应该能够访问它的方法恕我直言。 –
在ArcherSquad中,我有'arrowStrike()'metod,并且我没有在Archer中访问,因为Java说这个Squad没有这个方法。这是正常的,但我想重构我的结构能够做到这一点。 – Merdigon