go2goj, потому что статическая типизация. И динамический полиморфизм. Ты сам сказал компилятору, какого типа будет переменная, и он тебе верит. Ты в эту переменную присвоил потомка - происходит автоматическое приведение типа потомок -> предок, всё ок. Ты вызываешь метод у предка - компилятор видит, что этот метод может бросать исключение, и заставляет тебя проверить.
Дальше ты руками хардкастишь предка к потомку(а попробуй убрать каст) и вызываешь метод потомка, который не бросает исключения. Поэтому проверка не нужна.
В момент каста может случиться ClassCastException, если в переменной типа предка лежит не потомок, кастом ты об этом просишь. Поэтому в переменную типа потомок может попасть только потомок или его потомки.
cepprice, должен получиться компонент, который может инжектировать в те места, где это нужно. В @Inject поле или в конструктор. Руками обычно надо вызвать один метод у компонента, либо даже ничего делать не надо (Dagger Android).
oniava, обратись непосредственно к автору, torque-bhp.com/forums
Пусть он добавит. "Дописать исполняемый файл" это большая задача, кажется, что ты вряд ли захочешь отдавать за это десятки тысяч рублей.