我在接口
中定义了以下方法public interface Stack<T> {
void method1(T element);
T method2();
}
类实现此接口实现以下这些方法
private List<T> elements;
@Override
public void method1(T element) {
elements.add(element);
}
@Override
public T method2() {
return elements.remove(elements.size() - 1);
}
有了这个,我得到方法1的跟随错误:方法不会覆盖超类的方法,而method2工作正常。
知道我做错了什么吗?
答案 0 :(得分:0)
您还需要在界面和类中添加类型参数:
public interface Stack<T> { // here it is: <T>
void method1(T element);
T method2();
}
public class Impl<T> implements Stack<T> { // and here too
private List<T> elements;
@Override
public void method1(T element) {
elements.add(element);
}
@Override
public T method2() {
return elements.remove(elements.size() - 1);
}
}
答案 1 :(得分:0)
这完全没问题:
import java.util.ArrayList;
import java.util.List;
public class Main {
interface MyStack<T> {
void push(T item);
T pop();
}
static class MyStackImpl<T> implements MyStack<T> {
private List<T> items = new ArrayList<T>();
@Override
public void push(T item) {
items.add(item);
}
@Override
public T pop() {
return items.remove(items.size() - 1);
}
}
public static void main(String[] args) {
MyStack<Integer> stack = new MyStackImpl<Integer>();
stack.push(42);
System.out.println(stack.pop());
}
}
答案 2 :(得分:0)
您只需指定界面的通用类型interface Stack<T>
。
public interface Stack<T> {
void method1(T element);
T method2();
}
您还需要在实现class YourStack<T>
class YourStack<T> implements Stack<T>{
private List<T> elements;
@Override
public void method1(T element) {
elements.add(element);
}
@Override
public T method2() {
return elements.remove(elements.size() - 1);
}
}