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方法似乎并不奏效.
出现此错误是因为扩展/实现类有两个具有相同名称和参数类型(签名)的方法,以及不同的返回类型.在这种情况下,编译器特别抱怨该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)不兼容
您应该考虑是否需要add在SomeList接口中使用该方法(您也可以更改其名称),如果您确实需要它现在,那么将您的类从整个Collection层次结构中分离.
相关问题:两个Java方法可以具有相同的名称和不同的返回类型吗?