无法使用泛型覆盖方法

时间:2016-05-04 14:02:06

标签: java generics

我在接口

中定义了以下方法
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工作正常。

知道我做错了什么吗?

3 个答案:

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