Переопределение метода, который использует подтип

У меня есть абстрактный класс, имеющий абстрактный метод:

public abstract SomeClass Do(SomeClass o1, SomeClass o2);

Затем, когда я реализую в конкретном классе, который расширяет тот абстрактный класс, который имеет метод перед ним, я получаю ошибку:

@Override 
public AClass Do(AClass o1, AClass o2) //AClass extends Someclass
{
//
}

Почему я получаю ошибку, так как AClass является подтипом SomeClass?

Ошибка: метод... должен переопределить или реализовать метод супертипа

1 ответ

Решение

Вы получаете ошибку, потому что он не поддерживает тот же интерфейс. Представьте себе звонящего вот так:

AbstractClass x = new ImplementingClass();
x.Do(new SomeClass(), new SomeClass());

Это должно работать - это просто с помощью AbstractClass абстрактный метод, верно? Но ценности, которые вы передаете, не AClass ссылки, они просто SomeClass Рекомендации.

Ваш возвращаемый тип в порядке, но объявленные вами параметры "уже", чем исходный API, поэтому ваш метод не может обработать все вызовы, которые мог сделать оригинальный метод, и поэтому не может переопределить его.

Другие вопросы по тегам