我对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);现在,我想从ArcherSquad访问Archer中的方法。我怎样才能在不泄露任何信息的情况下更改代码?
发布于 2015-11-01 19:20:52
您可以将对小队的引用移到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
}https://stackoverflow.com/questions/33466026
复制相似问题