конечное ключевое слово не используется для такого рода безопасности. Это не замена того, что обычно требует криптографического решения.
В таких обсуждениях обычно подразумевается понятие «безопасность» - концепция защищенной объектной модели, то есть объектной модели, которой потребители не могут манипулировать в целях, не предусмотренных первоначальным автором класса.
Это своего рода, хорошо сконструированный класс будет инкапсулировать свое состояние, а класс, имеющий только конечные методы, не позволит потребителям переопределить поведение класса и изменить способ инкапсуляции состояния. Класс может раскрыть свое состояние (например, через открытые поля), и никакое ключевое слово не сможет защитить целостность этого состояния.
Это больше о "изменении" материала, чем о "защите". Последние ключевые слова просто убирают возможность изменять / модифицировать / расширять любой метод.
Это не делает ваш код более безопасным, это больше для безопасности потоков, чем что-либо еще. Если переменная помечена как финальная, ей необходимо присвоить значение при создании объекта. После создания объекта эта переменная не может быть привязана к другому значению.
Это поведение позволяет вам рассуждать о состоянии объекта и делать определенные предположения, когда несколько потоков обращаются к нему одновременно.
Я не думаю, что выход в финал игры повысит безопасность от злонамеренных атак (более вероятно, от ошибок и, конечно, от проблем с многопоточностью). Единственная «реальная форма» безопасности состоит в том, что если у вас есть последнее поле констант, оно может быть встроено во время компиляции, поэтому изменение его значения во время выполнения не окажет влияния.
Я слышал о финале и безопасности больше в контексте наследования. Сделав финал класса, вы можете помешать кому-либо разделить его на подклассы и коснуться или переопределить его защищенные члены, но я бы опять использовал это больше, чтобы избежать ошибки, чем для предотвращения угроз.