Вопрос-ответ

What is the point of "final class" in Java?

В чем смысл "окончательного класса" в Java?

Я читаю книгу о Java, и в ней говорится, что вы можете объявить весь класс как final. Я не могу придумать ничего, где я бы это использовал.

Я просто новичок в программировании, и мне интересно, действительно ли программисты используют это в своих программах. Если да, то когда они его используют, чтобы я мог лучше понять его и знать, когда его использовать.

Если Java объектно-ориентирована, и вы объявляете класс final, не мешает ли это идее класса, обладающего характеристиками объектов?

Переведено автоматически
Ответ 1

Прежде всего, я рекомендую эту статью: Java: когда создавать конечный класс



Если да, то когда они его используют, чтобы я мог лучше понять его и знать, когда его использовать.


final Класс - это просто класс, который нельзя расширить.

(Это не означает, что все ссылки на объекты класса будут действовать так, как если бы они были объявлены как final.)

Когда полезно объявлять класс как конечный, описано в ответах на этот вопрос:


Если Java объектно-ориентирована, и вы объявляете класс final, не мешает ли это идее класса, обладающего характеристиками объектов?


В некотором смысле да.

Помечая класс как конечный, вы отключаете мощную и гибкую функцию языка для этой части кода. Однако некоторые классы не должны (и в некоторых случаях могут не быть) спроектированы таким образом, чтобы должным образом учитывать подклассы. В этих случаях имеет смысл пометить класс как конечный, даже если это ограничивает ООП. (Помните, однако, что конечный класс все еще может расширять другой, не конечный класс.)

Ответ 2

В Java элементы с модификатором final не могут быть изменены!

Сюда входят конечные классы, конечные переменные и конечные методы:


  • Конечный класс не может быть расширен каким-либо другим классом

  • Конечной переменной нельзя присвоить другое значение

  • Конечный метод не может быть переопределен

Ответ 3

One scenario where final is important, when you want to prevent inheritance of a class, for security reasons. This allows you to make sure that code you are running cannot be overridden by someone.

Another scenario is for optimization: I seem to remember that the Java compiler inlines some function calls from final classes. So, if you call a.x() and a is declared final, we know at compile-time what the code will be and can inline into the calling function. I have no idea whether this is actually done, but with final it is a possibility.

Ответ 4

The best example is


public final class String


which is an immutable class and cannot be extended.
Of course, there is more than just making the class final to be immutable.

2023-10-13 22:57 java