0

LinearList と呼ばれる特定のインターフェイスを実装してほしい 2 つのクラスがあります。これらには多くの共通のメソッドがありますが、メソッド呼び出し add の 1 つには 2 つの異なる引数があり、メソッドの本体は両方のクラスで異なります。 、どうすればメソッドaddをインターフェースに追加できますか

public void add(String item) {
  array.add(item);
}

public void add(int index, Object theElement) {
  if (index < 0 || index > size)
    // invalid list position
    throw new IndexOutOfBoundsException
      ("index = " + index + "  size = " + size);

  // valid index, make sure we have space
  if (size == element.length) {
    // no space, double capacity
    Object [] newArray = new Object[element.length*2];
    System.arraycopy(element,0,newArray,0,element.length);     
    element = newArray;
  }

  // shift elements right one position
  for (int i = size - 1; i >= index; i--)
    element[i + 1] = element[i];

    element[index] = theElement;
    System.out.println("added ok");
    size++;
  }
}


public interface LinearList {
  public int size();
  public void add(int index, Object theElement);
}
4

3 に答える 3

1

特定のインターフェースの親インターフェースを作成します。

    interface Addable {
    /* common methods go here */
    }

   interface LinearListAddable extends Addable {
   void add(int index, Object theElement);
   }

   interface IndexedAddable extends Addable {
   /* some other specific add method */
   }

  class Test implements IndexedAddable {
  /*  add method implemeted */
  }
于 2013-10-25T17:20:52.983 に答える
1

次の 2 つの異なるメソッドをインターフェイスに追加します。

void add(String item);
void add(int index, Object theElement);

このインターフェイスを実装するときは、クラスに両方のメソッドを追加する必要があります。

于 2013-10-25T16:44:59.220 に答える
1

2 つのメソッドの名前が同じで引数が異なる場合、これはメソッドのオーバーロードと呼ばれます。Java インターフェイスはメソッドのオーバーロードをサポートしているため、両方を宣言するだけです。

void add(int index, Object theElement);
void add(String item);

これにより、両方を実装することが強制されます。それを行いたくない場合、唯一の解決策は、2 つのインターフェイス (およびおそらく 3 番目の共通インターフェイス) を使用することです。例えば:

interface GenericAddable {
  void add(String item);
}

interface IndexedAddable {
  void add(int index, Object element);
}

interface LinearList {
  void method1();
  void method2();
}

class List1 implements LinearList, GenericAddable {
  ..
}

class List2 implements LinearList, IndexedAddable {
  ..
}
于 2013-10-25T16:45:44.323 に答える