Приведение не о размере объекта: это о диапазоне переменной .
Под "диапазоном" я подразумеваю множество различных значений, которые может содержать переменная,Если вы присваиваете одну переменную другой, чей диапазон - это расширенный набор первых, вам не нужно приводить, потому что вы знаете, что назначение будет в порядке.Но когда вы присваиваете одну переменную другой, чей диапазон является подмножеством, вам необходимо выполнить приведение, потому что назначение может быть невозможным.того же размера.Понятно, что все, что вы можете хранить в проволочной корзине, вы можете хранить в ванне.Но не все, что вы можете держать в ванне, можно хранить в корзине.Куча яблок, ты можешь.Но куча изюма, вы не можете - они будут падать через отверстия в корзине.Таким образом, диапазон вещей, которые может вместить ванна, больше, чем диапазон вещей, которые может вместить корзина, даже при том, что оба имеют одинаковый размер.Перемещение будет помещаться в новый контейнер.Вам не нужно проверять при перемещении вещей из корзины в ванну, но вам нужно проверять при перемещении из ванны в корзину, в противном случае вы получите фрукты по всему полу.
В ваших конкретных случаях мы знаем, что каждый человек является млекопитающим, но не каждое млекопитающее является человеком, поэтому диапазон переменной типа Млекопитающее больше, чем диапазон переменной типа Человек.Мы также знаем, что диапазон double (приблизительно 2 ^ 1024 - - (2 ^ 1024)) больше, чем у int (2 ^ 31-1 - -2 ^ 31).Таким образом, присвоение от первого к последнему в любом случае требует приведения, но от последнего к первому - нет.