Сравниваю две задачи: 1407 и эту. В этой задаче достаточно написать в методе println: System.out.println(bridge.getCarsCount()); Компилятор сам поймет о каком мосте идет речь, хотя тип ссылки Bridge. В задаче же 1407 про Player и Dancer требуется для начала сузить тип ссылки с Person до Player или Dancer в зависимости от того, на объект какого типа она указывает, а потом уже вызывать методы person.play() или person.dance() примерно вот так:

public static void haveRest(Person person) { if (person instanceof Player) { (Player person).play(); } if (person instanceof Dancer) { ((Dancer)person).dance(); } }


Подскажите, пожалуйста, почему в одном случае компилятор определяет набор функций, к которым есть доступ по объекту, а в другом по ссылке? Где об этом можно почитать подробнее?