如何指定抽象 parent 字段的子类

How to specify subclass of abastract parent's field

所以我想做的是在抽象 class 上有一个字段,当这个抽象 class 在他们的 child 上继承时能够有那个字段作为摘要中所述 class 的 child parent.

例如,我有一个抽象的 Player class,然后是继承 Player 的 Client 和 Opponent(用于多人游戏)。 Player 有一个 Unit 类型的字段。 Unit本身由ClientUnit和OpponentUnit继承。我知道我可以只为我的客户端构造函数传递一个 ClientUnit 并将其分配为单元(继承,duh),但是我怎么会有一个 getter returns 它以 ClientUnit object 没有例外的风险和 what-not?

编辑:我添加了一些代码以更好地解释问题。

public abstract class Player {
    private Unit unit;        

    public void setUnit(Unit unit) {
        this.unit = unit;
    }
    public Unit getUnit() {
        return unit;
    }
}

public class Client extends Player {
    @Override
    public ClientUnit getUnit() {
        return (ClientUnit)super.getUnit();
    }
}

这似乎可行,但我不知道这是否是一种 safe/robust 方法。

您应该将父 class 的字段设置为 protected 而不是 private。这样就可以在 subclass.

中访问该字段

我不确定我是否理解了你的问题,但也许Type Parameters可以帮助你:

public abstract class Player<T extends Unit> {

    private T unit;

    public Player(T unit) { }

    public T getUnit() {
        return unit;
    }

    public void setUnit(T unit) {
        this.unit = unit;
    }
}

和实施 class:

public class Client extends Player<ClientUnit> {

    public Client(ClientUnit unit) { 
       super(unit); 
    }

    public static void main(String[] args) {
        Client client = new Client(new ClientUnit());
        ClientUnit unit = client.getUnit();
    }
}