返回类型与LinkedList <t> </t>不兼容

时间:2013-10-31 14:37:23

标签: java inheritance interface override method-overriding

Eclipse在我覆盖的继承方法上给出了返回类型不兼容的错误。

我有一个通用的SomeQueue类,它扩展了LinkedList并实现了泛型,这是我的通用SomeList类

public abstract class SomeQueue<T> extends LinkedList<T> implements SomeList<T>{
private int capacity=100;
public SomeQueue(){
 super();
Queue<E> tqueue=new LinkedList<T>();
T front=null;
T back=null;}

@Override
public boolean isEmpty(){}

@Override
public E get(int index){}

@Override
public int size(){}

@Override
public void add(T thing){}

@Override
public E removeEnd(){}

@Override
public void addFirst(T thing){}

@Override
public T remove(int index){}
}

这是我的SomeList接口

public interface SomeList<T>{
public boolean isEmpty();
public T get(int index);
public int size();
public void add(T item);
public T removeEnd();
public void addFirst(T thing);
public T remove(int index);}

Eclipse在add(T thing)类的QueueLis<T>方法中给出了错误。 明确说明

  

返回类型与LinkedList<T>.add(T)

不兼容

并建议将返回类型更改为boolean,我不想这样做。 SomeQueue中@Override方法上方的add(T thing)似乎不起作用。

1 个答案:

答案 0 :(得分:7)

出现此错误是因为扩展/实现类有两个具有相同名称和参数类型(签名)的方法,以及不同的返回类型。在这种情况下,编译器特别抱怨add(T)方法。

您的LinkedStack课程可能会延长LinkedList,因此可能会延长其boolean add(T)方法。从void add(T)继承并SomeList中覆盖的SomeQueue方法与LinkedList中的方法不兼容,因为它们具有不同的返回类型(以及相同的名称和参数)。

简单地说,当你调用SomeQueue.add(T)时,编译器不知道你是否要调用返回boolean的方法或返回int的方法。

换句话说,当您定义void add(T t)时,@OverrideLinkedList.add(T)不匹配(返回boolean),如果您返回boolean {1}} @OverrideSomeList.add(T)不匹配,void必须返回SomeList

作为旁注,只需拥有一个类工具LinkedList并扩展add,而无需定义public abstract class SomeQueue<T> extends LinkedStack<T> implements SomeList<T>{ /* Empty class definition */ } 方法:

add

,编译器应该已经按照以下

的方式给出错误
  

返回类型与继承的方法LinkedStack.add(E),LinkedList.add(E)

不兼容

您应该考虑是否需要SomeList接口中的{{1}}方法(您也可以更改其名称),如果您确实需要它现在,那么请分离您的班级来自整个Collection层次结构。

相关问题:Can two Java methods have same name with different return types?