В java почему допустимы типы ковариантных возвращаемых значений, если несовместимые типы возвращаемых данных генерируют ошибку времени компиляции. Разумеется, если JVM может обрабатывать ковариантные типы возвращаемых данных, тогда он может обрабатывать нековариантные типы возврата. Я полагаю, что когда java видит переопределенный метод с ковариантным возвратом, он просто применяет метод, связанный с вызывающим объектом. Почему это не может произойти с не ковариантными типами возврата. Я предполагаю, что это связано с нарушением условий контракта на суперкласс и, конечно, если это было разрешено, поведение методов подкласс (переопределенных) не очень предсказуемо (поскольку в обратном типе нет согласованности)?Возврат к Java-варианту Java
Вот пример (предположит, что собачий является подклассом еды, но Catfood не является подкласс еды):
класса Animal
public class Animal {
public Food seekFood() {
return new Food();
}
}
класса Dog
public class Dog extends Animal {
public DogFood seekFood() { //This is OK since its a covariant
return new DogFood();
}
}
класса Cat
public class Cat extends Animal {
public CatFood seekFood() { // This won't compile. Catfood is not covariant
return new CatFood();
}
}
Я не получил вашу точку на самом деле. Это может быть хороший вопрос, но, пожалуйста, объясните это одним примером .. Нам было бы лучше для всех нас. –