gpt4 book ai didi

java - 另一个继承类中的继承类

转载 作者:行者123 更新时间:2023-12-01 10:58:36 25 4
gpt4 key购买 nike

我在 Java 中遇到继承问题。我将使用军队的例子:我有一个类(class)基础:

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
}

关于java - 另一个继承类中的继承类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33466026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com