1. А как вы себе представляете обращение к объекту во время компиляции, когда этого объекта даже не существует? Это ж абсурд. Конечно, оно происходит во время выполнения, когда инстансы этих объектов созданы и существуют.
2. Не важно, на что это влияет, когда это верный подход. Лучше процент потерять на производительности, чем поломать инкапсуляцию и полиморфизм и писать говнокод.
3. Да, в 99% нужно использовать её, ибо это нативная для многих языков реализация
Принципа подстановки Барбары Лисков из паттернов
SOLID.
Может вопросы покажутся кому-то глупыми, но я не могу приступить к следующей главе, пока не разберу хорошо тему и не найду ответы на свои вопросы.
Правильно думаете, многие забивают на это понимание, а потом говнокодят со всякими
switch instanceof.
Вообще, в хорошем ООП дизайне, когда вы встречаете стопку поведенческих if'ов, больше 5-7 штук, switch'ей, и так далее, то в этом месте стоит задуматься об использовании диспетчеризации, ибо они, в подавляющем большинстве случаев, заменяемы в пользу более гибкого и адекватного ООП-дизайна. Но, не фанатично всё подряд менять, конечно же =)