返回类型与LinkedList <T>不兼容

gwr*_*wrw -3 java inheritance overriding interface

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){}
}
Run Code Online (Sandbox Code Playgroud)

这是我的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);}
Run Code Online (Sandbox Code Playgroud)

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

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

并建议将返回类型更改为boolean,我不想这样做.在@Override上述add(T thing)中SomeQueue方法似乎并不奏效.

Xav*_*ica 7

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

你的LinkedStack课程可能正在扩展LinkedList,因此也就是它的boolean add(T)方法.void add(T)继承自SomeListand overriden 的方法与in中的SomeQueue方法不兼容LinkedList,因为它们具有不同的返回类型(以及相同的名称和参数).

简而言之,当您调用时SomeQueue.add(T),编译器将不知道您是否要调用返回a的方法boolean或返回的方法int.

换句话说,当你定义void add(T t)@Override不匹配LinkedList.add(T)(返回 boolean),如果你做它返回boolean@Override将不匹配SomeList.add(T),它必须返回void.

作为旁注,只需要一个类实现SomeList和扩展LinkedList,而无需定义一个add方法:

public abstract class SomeQueue<T> 
                extends LinkedStack<T> 
                implements SomeList<T>{ /* Empty class definition */ }
Run Code Online (Sandbox Code Playgroud)

,编译器应该已经按照以下方式给出了错误

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

您应该考虑是否需要addSomeList接口中使用该方法(您也可以更改其名称),如果您确实需要它现在,那么将您的类从整个Collection层次结构中分离.

相关问题:两个Java方法可以具有相同的名称和不同的返回类型吗?