使用两种不同的方法签名和正文实现接口

时间:2013-10-25 16:43:18

标签: java inheritance arraylist interface

我有两个类我希望它们实现一个名为LinearList的特定接口,它们有很多共同的方法,但是其中一个方法调用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);
}

3 个答案:

答案 0 :(得分:1)

您可以在界面中添加两种不同的方法:

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

实现此接口时,必须在类中添加这两种方法。

答案 1 :(得分:1)

当两个方法具有相同名称但参数不同时,则称为method overloading。 Java接口支持方法重载,因此您只需声明它们:

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

这将强制您实现这两个,如果您不想这样做,唯一的解决方案是使用两个接口(可能是第三个通用接口)。例如:

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 {
  ..
}

答案 2 :(得分: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 */
  }