无法用泛型重写方法



我在接口中定义了以下方法

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的以下错误:方法不会覆盖超类中的方法,而方法2工作正常。

知道我做错了什么吗?

这非常好用:

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

您需要将类型参数添加到接口和类中:

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

您只需要指定接口的泛型类型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);
    }
}