Переопределение метода, который использует подтип
У меня есть абстрактный класс, имеющий абстрактный метод:
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, поэтому ваш метод не может обработать все вызовы, которые мог сделать оригинальный метод, и поэтому не может переопределить его.