0

具体的には、次のような Java エラーで問題が発生しています。

arrayqueue.ArrayQueue は抽象的ではなく、arrayqueue.ArrayQueue.(ArrayQueue.java:11) で arrayqueue.Queue の抽象メソッド dequeue() をオーバーライドしません。

エラーが発生しているコードは次のとおりです。

public class ArrayQueue<E> implements Queue<E> {

E [] Q; 
int f,r;
int size;

static final int CAPACITY = 1000; 
int capacity; 

public ArrayQueue() {
    this(CAPACITY);
}

public ArrayQueue(int cap){
    capacity = cap;
    Q = (E []) new Object[capacity];
    f = 0;
    r = 0;
    size = 0;
}



public static void main(String[] args) {

}

}

行 11 は次の行になります。public class ArrayQueue<E> implements Queue<E> {具体的には、この行の が何を意味するのかわかりません<E>。循環配列を使用してキュー ADT を実装しようとしています。明らかに、これは Queue インターフェースを実装していますが、インターフェースの概念もまだよく理解していません (なぜ Java は Python のようになれないのでしょうか!?)

参考までに、以下に Queue インターフェースも掲載しました。

public interface Queue<F> {


public int size();
public boolean isEmpty();
public F front() throws EmptyQueueException;
public void enqueue(F element);
public F dequeue() throws EmptyQueueException;

}

これは約 5 つの質問が連続していることはわかっていますが、概念的には混乱を招きます。助けていただければ幸いです。

4

1 に答える 1

1

「E」は、タイプ (文字列、整数など) のプレースホルダーです。「テンプレート」を定義するときは、E のようなものを使用します。Java には、特定の型を処理するためのクラスを作成するために使用できる「ジェネリック」テンプレート クラスを提供する機能があります。したがって、テンプレート class がある場合はBlah<E>、タイプのクラスをインスタンス化できますBlah<String>...そして、バム、String オブジェクトのみを処理する Blah があります。

この場合、汎用インターフェースがあります。同じ方法で処理されるジェネリック インターフェイスを使用するジェネリック クラスを定義しています。

さて、インターフェイスは基本的に、クラスが特定のメソッドを実装することを保証する単なる「仕様」です。したがって、メソッド X、Y、および Z を指定する Woogie を実装するクラス Meatball がある場合、Java の世界の残りの部分は、Meatball がメソッド X、Y、および Z を持つことが保証されていることを知ることになります。

などのジェネリック インターフェイスを実装するときに必要なことは、ArrayQueue<E>実際に ArrayQueue を使用して処理する可能性のある型ではなく、E を使用してクラスを定義し続けることです。クラスを実際にインスタンス化するときに、ArrayQueue に文字列を格納する場合は、

ArrayQueue<String> myQueue = new ArrayQueue<String>

...しかし、後でもう一度使用して、「irQueue」を作成するときに String を Integer に置き換えることができます。Java は、各 ArrayQueue に特定のタイプのオブジェクトのみが含まれるように強制します。

要約すると、Queue が保証するすべてのメソッド (リストしたもの) を実装し、ArrayQueue<E>クラス内でジェネリックに保つ必要があるため、Java は Queue インターフェースの使用について泣き言を言うことはありません。

于 2013-10-20T16:33:59.943 に答える