繁体   English   中英

用两种不同的方法签名和主体实现接口

[英]implementing an interface with two different method signature and body

我有两个类,我希望它们实现一个称为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);
}

您将两种不同的方法添加到接口:

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

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

当两个方法具有相同的名称但参数不同时,这称为方法重载 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 {
  ..
}

为您的特定接口创建父接口:

    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 */
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM