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)
似乎不起作用。
答案 0 :(得分:7)
出现此错误是因为扩展/实现类有两个具有相同名称和参数类型(签名)的方法,以及不同的返回类型。在这种情况下,编译器特别抱怨add(T)
方法。
您的LinkedStack
课程可能会延长LinkedList
,因此可能会延长其boolean add(T)
方法。从void add(T)
继承并SomeList
中覆盖的SomeQueue
方法与LinkedList
中的方法不兼容,因为它们具有不同的返回类型(以及相同的名称和参数)。
简单地说,当你调用SomeQueue.add(T)
时,编译器不知道你是否要调用返回boolean
的方法或返回int
的方法。
换句话说,当您定义void add(T t)
时,@Override
与LinkedList.add(T)
不匹配(返回boolean
),如果您返回boolean
{1}} @Override
与SomeList.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?