Я слышал эту линию где-то и я не могу получить его с ума:Окончательный класс и основные последствия в Java
«Все члены конечного класса неявно окончательным.»
Теперь я очень хорошо знаю эти три известных понятий:
final
класса не может быть продлен.- A
final
переменная не может быть повторно назначена с новым значением после инициализации. - A
final
метод нельзя переопределить.
Но если все члены (переменные, методы) конечного класса неявно окончательны, то у нас есть окончательный класс И конечные переменные И конечные методы в нем.
Затем, как это возможно, что StringBuilder
, несмотря на то, что он является окончательным, позволяет его содержимое менять ?!
final не означает неизменяемость (см., Например, 'ArrayList') –
Только методы окончательно неявно (так как они могут быть переопределены только подклассом и подклассификацией). Переменные остаются неопределенными, если не отмечены. – Dave
Вы не можете переопределить любые методы в классе StringBuilder, только его текстовое содержимое может быть изменено, обратите внимание на разницу. – Biu