所以我要做的是在一个抽象类上有一个字段,当这个抽象类在它们的子节点上继承时,能够将该字段作为抽象父节点中声明的类的子节点。
例如,我有一个抽象的Player类,然后是Client和Opponent(它适用于多人游戏),它继承了Player。玩家有一个单位类型的领域。单元本身由ClientUnit和OpponentUnit继承。我知道我可以为我的Client构造函数传递一个ClientUnit并将其指定为Unit(继承,duh),但是如何在ClientUnit对象的形式上返回它而不会有异常和什么不是? / p>
编辑:我添加了一些代码来更好地解释这个问题。
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();
}
}
这似乎有效,但我不知道这是否是一种安全/可靠的方式。
答案 0 :(得分:1)
我不确定我是否理解了您的问题,但也许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;
}
}
实施类:
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();
}
}
答案 1 :(得分:-1)
您应该将父类的字段设置为protected
而不是private
。这样,该字段可以在子类中访问。