Владислав Лысков, lol. Да это тред троллинга, ну серьёзно что ли такой вопрос? Когда человек хочет писать, он берёт и пишет, материалов море. А тут фундаментальный вопрос что выбрать. Человек услышал, что погромистам хорошо платят и решил "а чё бы нет?". Так это не работает.
go2goj, я тебе дал ссылку, где прямо описывается, как пишется булеан.
Writes a boolean to the underlying output stream as a 1-byte value. The value true is written out as the value (byte)1; the value false is written out as the value (byte)0. If no exception is thrown, the counter written is incremented by 1.
Разжую - булеан это логическое значение, как оно представлено в памяти - это детали реализации. Но оно как-то должно быть записано, и это не меньше чем байт(минимальная адресуемая ячейка). Они решили писать так. Конец.
go2goj, потому что статическая типизация. И динамический полиморфизм. Ты сам сказал компилятору, какого типа будет переменная, и он тебе верит. Ты в эту переменную присвоил потомка - происходит автоматическое приведение типа потомок -> предок, всё ок. Ты вызываешь метод у предка - компилятор видит, что этот метод может бросать исключение, и заставляет тебя проверить.
Дальше ты руками хардкастишь предка к потомку(а попробуй убрать каст) и вызываешь метод потомка, который не бросает исключения. Поэтому проверка не нужна.
В момент каста может случиться ClassCastException, если в переменной типа предка лежит не потомок, кастом ты об этом просишь. Поэтому в переменную типа потомок может попасть только потомок или его потомки.