У тебя это задом наперед. Вы можете добавить Elephant в массив Animal, потому что он является Animal, и он гарантированно имеет все методы, которые требуется для Animal. Вы не можете добавить Animal в массив Elephant, потому что он не имеет все методы, которые требуется для Elephant.
Статья в Википедии о ковариации и контравариантности имеет хорошее объяснение этого:
В системе типов языка программирования оператор от типов к типам является ковариантным, если он сохраняет порядок типов, который упорядочивает типы от более специфических к более общим; это противоречиво, если это полностью изменяет этот порядок. Если ни один из них не применим, оператор инвариантен. Эти термины взяты из теории категорий.
Кроме того, вы сказали, что тип Elephant был "больше", а это не так. Тип Животное «больше» в том смысле, что оно включает в себя более специфические типы, такие как Слон, Жираф и Лев.