-3

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);}

add(T thing)Eclipse在类中的方法上给了我一个错误QueueLis<T>。这明确表示

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

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

4

1 回答 1

7

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

您的LinkedStack类可能正在扩展LinkedList,因此它的boolean add(T)方法。void add(T)从 in 继承SomeList和覆盖的方法与 in 的SomeQueue方法不兼容LinkedList,因为它们具有不同的返回类型(以及相同的名称和参数)。

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

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

附带说明一下,只需拥有一个类 implementSomeList和 extend LinkedList,而不定义add方法:

public abstract class SomeQueue<T> 
                extends LinkedStack<T> 
                implements SomeList<T>{ /* Empty class definition */ }

,编译器应该已经按照以下内容给出错误

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

您应该真正考虑是否需要接口中的该add方法SomeList(您也可以更改其名称),如果您确实需要它现在的状态,则将您的类从整个Collection层次结构中分离出来。

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

于 2013-10-31T14:44:18.743 回答