240 Глава 10. Наследование и полиморфизм
что при этом ее контракт не будет нарушен. Абстрактные операции
можно безопасно переопределять всегда, потому что они именно для
этого и предназначены. Однако переопределение конкретных опера
ций может иметь неожиданные последствия и представлять некото
рую опасность. Часто операция подкласса просто выполняет какоето
дополнительное действие и вызывает операцию суперкласса. Иначе
говоря, она добавляет собственное поведение в операцию суперкласса.
Это хороший способ повторного использования и расширения поведе
ния конкретной операции суперкласса, поскольку, как правило, он
безопасен.
Некоторые языки программирования обеспечивают возможность пре
дотвратить переопределение конкретной операции суперкласса в под
классе. В Java добавление ключевого слова final (финальный) в сигна
туру операции явно запрещает переопределение операции. На практи
ке в Java считается хорошим стилем определять как final все операции,
кроме тех, которые вы хотите явно определить как полиморфные.
10.5. Дополнительные аспекты обобщения
В данном разделе мы рассмотрим два углубленных аспекта обобще
ния: множества обобщения и множества всех типов. Понятие мно
жеств обобщения может быть весьма полезным. А вот множества всех
типов используются крайне редко. Они включены в эту книгу глав
ным образом для обеспечения полноты изложения.
10.5.1. Множества обобщения
Подклассы любого суперкласса можно организовать в одно или более
множеств обобщения.
Множества обобщения распределяют подклассы соответственно опре
деленному правилу.
Множества обобщения группируют подклассы соответственно опреде
ленному правилу или на основании специализации. Обсудим пример.
На рис. 10.11 показано, что у класса Shape может быть множество под
классов. Рассматривая эти подклассы, мы обнаруживаем здесь две со
вершенно разные группы фигур: двух и трехмерные.
На диаграмме классов это разделение подклассов можно отобразить
путем ассоциирования каждой группы фигур с разным множеством
обобщения, как показано на рис. 10.12.
К множествам обобщения могут применяться ограничения. Они опре
деляют, являются ли множества: