首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承类在另一个继承类中

继承类在另一个继承类中
EN

Stack Overflow用户
提问于 2015-11-01 19:05:48
回答 1查看 62关注 0票数 0

我对Java的继承有问题。我要用军队的例子:我有一个阶级基地:

代码语言:javascript
复制
public class Soldier {
    Squad squad;

    public Soldier(Squad _squad) {
        squad = _squad;
    }
    //and some methods, that use squad 
}

我有:

代码语言:javascript
复制
public class Archer extends Soldier {
    public Archer(ArcherSquad _squad) {
        super(_squad);
    }
    //some new methods, some override 
}

以及:

代码语言:javascript
复制
public class Warrior extends Soldier {
    public Warrior(WarriorSquad _squad) {
        super(_squad);
    }
    //some new methods, some override 
}

我的小队看起来:

代码语言:javascript
复制
Squad;
ArcherSquad extends Squad(some new methods);
WarriorSquad extends Squad(some new methods);

现在,我想从ArcherSquad访问Archer中的方法。我怎样才能在不泄露任何信息的情况下更改代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-01 19:20:52

您可以将对小队的引用移到ArcherSquad

代码语言:javascript
复制
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转换为泛型类。

代码语言:javascript
复制
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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33466026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档