Вопрос по этой лекции. Отрывок:
Cow cow = new Whale();

Классическое расширение типа — оператор преобразования типа не требуется.
Теперь у объекта типа Whale можно вызывать только методы, описанные в классе Cow.
Компилятор разрешит вызвать у переменной cow только те методы, которые есть у ее типа — класса Cow.
Кто-то может подсказать, а зачем нам вообще такое поведение в программе может понадобиться? Мы же писали определенные методы для объекта Whale, у него есть свои, свойственные только ему переменные. Зачем же нам выполнять такое расширение типа и лишать себя возможности использовать те специфичные методы и переменные, которые мы создали для Whale?