Конечные классы
Ключевое слово _sealed (конечный) указывает на то, что класс или структуру нельзя использовать в качестве базового типа. Другими словами, в иерархии наследования этот класс или структура – терминальный тип. Ключевое слово _sealed (конечный) можно также применять к отдельному методу класса.
Конечный метод не может быть переопределен в производных классах. В стандарте C++ подобная возможность не предусмотрена; однако в Java такая возможность реализована с помощью ключевого слова final (конечный). Следующий фрагмент кода является некорректным, так как конечный класс не может быть базовым:
_sealed class SomeSealedClass { }; class SomeDerivedClass: public SomeSealedClass // ошибка { };
Одной из причин использования ключевого слова _sealed (конечный) является повышение стабильности работы классов за счет препятствования слишком самоуверенным и/или недостаточно квалифицированным программистам испортить важные и сложные элементы поведения классов в производных от них. Другой аргумент использования _sealed (конечный) – предотвращение попыток изменить возможности, обеспечивающие безопасность.
Например, предопределенный класс string (Строка) объявлен как конечный, а вдобавок к тому – еще и как неизменяемый (он не содержит общедоступных методов или элементов данных, что могло бы позволить изменять его содержимое). Это делает его идеальным для использования в защитных целях, например, для хранения паролей. При попытке скомпилировать следующий код будет выдана ошибка, так как класс string (Строка) является конечным:
// не допустимо, потому что Система::Строка – конечный класс class MyString: public String // класс MyString: общедоступная Строка { };