无法在Vector <superclass>中从子类转换为超类

时间:2016-02-01 15:56:55

标签: java inheritance vector

我有一个名为RiverCrossingGame的通用游戏类。这个想法是这个子类将实现不同的河流谜题。

在我的超类中,我有Vector个状态。现在这些状态是通用的。 GenericState实现了任何河流穿越游戏的状态概念中常见的一些行为。子类关联状态将实现特定于游戏的其他方法。

所以我的RiverCrossingGame带有状态向量:

public abstract class RiverCrossingGame implements PuzzleGame {
    public GenericBank westBank;
    public GenericBank eastBank;
    public static Vector<GenericState> states;
    public List<String> steps;

    public abstract void play();
    public abstract void printSteps();
}

然后WolfGoatCabbageGame我为这个游戏定义了一个名为State的特定状态(它在Wolf,Goat和Cabbage游戏包中),它是GenericState的子类:

public class State extends GenericState {
    // State members...
}

然后在实际类的类中,我尝试初始化状态向量:

public class WolfGoatCabbageGame extends RiverCrossingGame {
    public enum Element { FARMER, WOLF, GOAT, CABBAGE };

    public WolfGoatCabbageGame() {
        westBank = new Bank("WEST", new Element[]{ Element.FARMER, Element.WOLF, Element.GOAT, Element.CABBAGE }, false);
        eastBank = new Bank("EAST", true);
        states = new Vector<State>();
        steps = new ArrayList<String>();
    }

    // more members...
}

这就是问题所在。初始化states时,我收到此错误:

  

类型不匹配:无法从Vector转换为   向量

这就是我得到的地方。 StateGenericState的子类。为什么我无法以这种方式初始化Vector?我错过了一些明显的东西吗我该怎么办?

1 个答案:

答案 0 :(得分:1)

我认为您需要将states初始化为Vector<GenericState>。初始化后,您可以使用State类型的实例填充它,因为它们是GenericState类的实例。