Как исправить ошибку о супертипе при реализации метода с параметром E e? - PullRequest
1 голос
/ 30 апреля 2019

Мне нужно создать стек на основе массива, который получает метод из интерфейса. Там я хочу реализовать метод push (E e) из интерфейса, но я получаю следующую ошибку:

The method push(E) of type ArrayStack<E> must override or implement a supertype method
public interface Stack<E> extends BasicCollection {

   public E top() throws EmptyStackException;

   public void push(E e);

   public E pop() throws EmptyStackException;

}
@Override
   public void push(E e) {
       if(size == arrayCapacity) {
           array = Arrays.copyOf(array, array.length * 2);
       }
       array[size] = e;
       size += 1;
   }

Как я могу решить это? Он имеет тот же параметр, что и в интерфейсе. Что не так?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Когда вы пишете implements Stack, вы используете необработанный тип.

См. Что такое необработанный тип и почему мы не должны его использовать?

Поскольку вы не указали универсальный тип E в Stack<E>, используется базовый тип Object, как если бы вы написали implements Stack<Object>. Это означает, что класс должен реализовывать метод push(Object) вместо push(E).

Предположительно, вы имели в виду

class ArrayStack<E> implements Stack<E>
0 голосов
/ 30 апреля 2019

открытый класс ArrayStack реализует стек

Это было объявление моего класса. Этот работал:

открытый класс ArrayStack реализует стек

Только что добавлено в стек декларации clas.

...