这里的类VectorQueue是实现向量方法的队列数据结构。在底部的测试类中,我可以成功编译代码,例如“ myVector.enqueue(20);”,其中myVector是VectorQueue类的实例。实际类型为Queue-参见此处

Queue<Integer> myVector = new VectorQueue<Integer>();


我的问题是:实例“ myVector”被实现为Queue类型后,是否无法在其上使用矢量方法?我尝试了以下方法:

((Vector<T>) myVector).insertAtRank(2,5);


我还尝试使我的主类VectorQueue实现Queue和Vector接口,但这没有帮助。我也想知道,为什么某些东西不能具有多个已实现的类型?

package W7;

public class VectorQueue<T> implements Queue<T> {

public Vector<T> myVector = new ArrayVector<T>();

public void enqueue(T e) {
    myVector.insertAtRank(myVector.size(), e);
}

public T front() {
    return myVector.elemAtRank(0);
}

public T dequeue() {
    return myVector.removeAtRank(0);
}

public boolean isEmpty() {
    return myVector.isEmpty();
}

public int size() {
    return myVector.size();
}

public String toString(){
    return myVector.toString();
}

public static void main(String[] args) throws VectorFullException,
        RankOutOfBoundsException {

    Queue<Integer> myVector = new VectorQueue<Integer>();

    try {

        myVector.enqueue(10);
        System.out.println(myVector);

        myVector.enqueue(5);
        System.out.println(myVector);

        myVector.dequeue();
        System.out.println(myVector);

        myVector.enqueue(15);
        System.out.println(myVector);

        myVector.enqueue(3);
        System.out.println(myVector);

        myVector.dequeue();
        System.out.println(myVector);

        myVector.enqueue(7);
        System.out.println(myVector);

        myVector.dequeue();
        System.out.println(myVector);

        myVector.enqueue(20);
        System.out.println(myVector);

        ((Vector<T>) myVector).insertAtRank(2,5);

    } catch (VectorFullException RankOutOfBoundsException) {
        System.out.println("Error");
    }
    int total = 0;
    while(! myVector.isEmpty()){
        total += myVector.dequeue();
    }
    System.out.println("The total size of the contents: " + total);
    }
}

最佳答案

不用为接口引用创建实例,而要使用类的引用。 VectorQueue<Integer> myVector = new VectorQueue<Integer>();

10-06 00:44