IEDA不允许接口中的push方法的实现类像老师那样实现

来源:3-2 栈的基本实现

吐槽职人

2019-01-07

老师您好,我在跟着您的课程做的时候,发现我在写Stack接口的实现类ArrayStack时候发现,其中的push方法在像老师那样

@Override
    public void push(E e) {
        array.addLast(e);
    }

实现的话IDEA就会报错,只有写成

@Override
    public void push(Object o) {
        array.addLast((E) o);
    }

才可以通过IDEA的编译不报错,我明明已经将接口中的push传入参数设置成泛型E了

public interface Stack<E> {
    void push(E e);  // 入栈
}

请问老师这是怎么回事?
以下是IDEA的报错信息

‘push(E)’ in ‘three_scackAndQueue.ArrayStack’ clashes with ‘push(E)’ in ‘three_scackAndQueue.Stack’; both methods have same erasure, yet neither overrides the other

写回答

1回答

liuyubobobo

2019-01-08

请确认一下你的ArrayStack类声明是正确的,尤其是泛型相关:

public class ArrayStack<E> implements Stack<E>


可以尝试一下使用课程的官方代码,在你的环境下运行,看是否也有相同的问题?如果没有问题,仔细检查一下,自己的代码哪里是不是有问题?


课程的官方代码可以参考课程的官方github,传送门:https://github.com/liuyubobobo/Play-with-Data-Structures 


如果访问github有困难,也可以使用慕课网内的课程github,传送门:https://git.imooc.com/coding-207/coding-207 


加油!:)

1
1
吐槽职人
感谢老师,确实是这里出了问题,是我马虎大意了
2019-01-08
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程