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