如何指定abastract parent的字段的子类

时间:2017-01-10 15:22:27

标签: java inheritance abstract-class parent-child getter-setter

所以我要做的是在一个抽象类上有一个字段,当这个抽象类在它们的子节点上继承时,能够将该字段作为抽象父节点中声明的类的子节点。

例如,我有一个抽象的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();
    }
}

这似乎有效,但我不知道这是否是一种安全/可靠的方式。

2 个答案:

答案 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。这样,该字段可以在子类中访问。