Есть несколько причин. Один
спектакль. Мы можем наблюдать это как
люди пишут код на Java, они забывают
отметить их методы окончательно.
Таким образом, эти методы являются виртуальными.
Потому что они виртуальные, они не
выступи так же. Там просто
накладные расходы, связанные с
будучи виртуальным методом. Это один
выпуск.
Более важной проблемой является управление версиями.
Есть две школы мысли о
виртуальные методы. Академическая школа
мысли говорит: «Все должно быть
виртуальный, потому что я мог бы хотеть
переопределите это когда-нибудь. "Прагматичный
школа мысли, которая исходит от
создание реальных приложений, которые работают в
реальный мир говорит: «Мы должны быть
очень внимательно относимся к тому, что мы делаем
виртуальный ".
Когда мы делаем что-то виртуальное в
платформа, мы делаем очень много
обещания о том, как оно развивается в
будущее. Для не виртуального метода мы
Обещаю, что когда ты называешь это
метод, х и у произойдет. Когда мы
опубликуем виртуальный метод в API, мы
не только обещают, что когда вы звоните
этот метод, х и у произойдет. Мы
также обещаю, что когда вы переопределите
этот метод, мы будем называть его в этом
конкретная последовательность в отношении
эти другие, и государство будет
в этом и том инварианте.
Каждый раз, когда вы говорите виртуальный в API,
Вы создаете ловушку обратного вызова. Как
дизайнер ОС или API,
ты должен быть очень осторожным
тот. Вы не хотите, чтобы пользователи переопределяли
и перехватывать в любой произвольной точке
API, потому что вы не можете обязательно
сделать эти обещания. И люди могут
не до конца понимают обещания, которые они
делают, когда они делают что-то
виртуальная.