JavaRush/Java Π±Π»ΠΎΠ³/Архив info.javarush/ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ классы final Java
articles
15 ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ классы final Java

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ Архив info.javarush
участников
ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ final, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π²Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс Π½Π΅ Π² состоянии ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ вСрсии ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Класс Π² Ρ†Π΅Π»ΠΎΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ final. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ классы final Java - 1
final class NoExtending {
// …
}
Класс, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ final, Π½Π΅ поддаСтся наслСдованию ΠΈ всС Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ косвСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°ΡŽΡ‚ свойство final. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π° final Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² способно ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ бСзопасности ΠΊΠΎΠ΄Π°. Если класс снабТСн ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ final, Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π² Бостоянии Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ класс ΠΈ, вСроятно, Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ этом Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚. Если ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ final ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΎ всСх ситуациях, Π½Π΅ опасаясь "ΠΏΠΎΠ΄Π΄Π΅Π»ΠΊΠΈ". УмСстно ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ final, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² объявлСнии ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ пароля, Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ ИсполнСниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ прСдусмотрСно ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΌΡƒ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΡƒ Π½Π΅ удастся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, "подсунув" ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, которая, скаТСм, всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ рСгистрации ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΎΠ½ Π²Π²Π΅Π» Π½Π° самом Π΄Π΅Π»Π΅. Π’Ρ‹ Π²ΠΏΡ€Π°Π²Π΅, Ссли позволяСт конкрСтная ситуация, ΠΏΠΎΠΉΡ‚ΠΈ дальшС ΠΈ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ final класс Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ; ΠΌΠ΅Ρ‚ΠΎΠ΄ ValidatePassword ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Ρ‘Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ свойство косвСнным ΠΏΡƒΡ‚Ρ‘ΠΌ. Π£ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° final Π² объявлСнии ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ класса Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ограничСния Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ дальнСйшСго использования ΠΈ развития ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ final Π² объявлСнии ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – это Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° самодостаточна ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°. Π”Ρ€ΡƒΠ³ΠΈΠ΅ программисты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ захотят Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вашим классом, Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ² Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΡƒΠ³ΠΎΠ΄Ρƒ собствСнным потрСбностям, Π±ΡƒΠ΄ΡƒΡ‚ стСснСны Π² Π²Ρ‹Π±ΠΎΡ€Π΅ срСдств достиТСния Ρ†Π΅Π»ΠΈ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π»ΠΈΡˆΠ΅Π½Ρ‹ Ρ‚Π°ΠΊΠΎΠ²Ρ‹Ρ…. ΠŸΠΎΠΌΠ΅Ρ‚ΠΈΠ² ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ final класс Π² Ρ†Π΅Π»ΠΎΠΌ, Π²Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ наслСдования ΠΈ, вСроятно, сущСствСнно снизитС Π΅Π³ΠΎ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ для Π΄Ρ€ΡƒΠ³ΠΈΡ…. Π‘ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ final, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π»ΠΈ Π’Π« ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΆΠ΅Ρ€Ρ‚Π²Π°ΠΌ ΠΈ стоит Π»ΠΈ ΠΈΡ… принСсти. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях для достиТСния достаточного уровня бСзопасности ΠΊΠΎΠ΄Π° вовсС Π½Π΅Ρ‚ нСобходимости ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ вСсь класс ΠΊΠ°ΠΊ final – Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ класса ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ, ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΠ² ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ final Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ "критичСскиС" структурныС элСмСнты. Π’ этом случаС Π²Ρ‹ оставитС Π² нСприкосновСнности основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ класса ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π΅Π³ΠΎ наслСдованиС с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ², Π½ΠΎ Π±Π΅Π· пСрСопрСдСлСния "старых". РазумССтся, поля, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ обращаСтся ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² final, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ final Π»ΠΈΠ±ΠΎ private, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС любой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… содСрТимоС, воздСйствуя Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ эффСкт примСнСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° final связан с ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ компилятором. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ final, ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ систСма опрСдСляСт фактичСский класс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, связываСт Π²Ρ‹Π·ΠΎΠ² с Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящим ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ этому ΠΊΠΎΠ΄Ρƒ. Но Ссли Π±Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Ρ‚ΠΎΠ΄ getName Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ класса Attr, рассмотрСнном Ρ€Π°Π½ΡŒΡˆΠ΅, Π±Ρ‹Π» ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ ΠΊΠ°ΠΊ final, опСрация обращСния ΠΊ Π½Π΅ΠΌΡƒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±Ρ‹Π»Π° Π±Ρ‹ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π°. Π’ самом Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ случаС, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ Ρ‚ΠΎΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ касаСтся getName, компилятор ΠΌΠΎΠΆΠ΅Ρ‚ попросту Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠΎΠ΄ΠΎΠΌ Π΅Π³ΠΎ Ρ‚Π΅Π»Π°. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ носит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ встраивания ΠΊΠΎΠ΄Π° (inlining). ΠŸΡ€ΠΈ использовании inline-вСрсии ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getName Π΄Π²Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… выраТСния Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ:
system.out.println("id = " + rose.name);
system.out.println("id = " + rose.getName());
Π₯отя ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ выраТСния Ρ€Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹, Π²Ρ‚ΠΎΡ€ΠΎΠ΅ всС-Ρ‚Π°ΠΊΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ прСимущСством, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ getName позволяСт ΠΏΡ€ΠΈΠ΄Π°Ρ‚ΡŒ полю name свойство "Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния", Π° ΠΊΠΎΠ΄Ρƒ класса – Π½Π΅ΠΊΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ абстракции, которая обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ свободного измСнСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса. Π’Π° ΠΆΠ΅ схСма ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° компилятором ΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ private ΠΈ statiс, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ пСрСопрСдСлСния. ИспользованиС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° final Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… классов способствуСт Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ эффСктивности Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ². Π’ этом случаС ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΡƒΠΆΠ΅ Π½Π° стадии компиляции ΠΈ поэтому ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ошибки Π²Ρ‹ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅. Если компилятор встрСчаСт Π² исходном тСкстС ссылку Π½Π° класс final, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ "ΡƒΠ²Π΅Ρ€Π΅Π½", Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ относится ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊ Ρ‚ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Π½. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π² состоянии сразу ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мСсто, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ классом Π² ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов, ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π²Π΅Ρ€Π½ΠΎ Ρ‚ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Если ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ final Π½Π΅ примСняСтся, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° стадии выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.4. ЦСлСсообразно Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² объявлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (ΠΈ Ссли Π΄Π°, Ρ‚Π° ΠΊΠ°ΠΊΠΈΡ… ΠΈΠΌΠ΅Π½Π½ΠΎ) классов vehicle ΠΈ passengervehicle ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ final? Бсылка Π½Π° пСрвоисточник: http://src-code.net/metody-i-klassy-final-java
ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ (2)
  • популярныС
  • Π½ΠΎΠ²Ρ‹Π΅
  • старыС
Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ
πŸ¦” Π’ΠΈΠΊΡ‚ΠΎΡ€ Π²Π΅Π΄Ρƒ ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΉ Ρ‚Π³-ΠΊΠ°Π½Π°Π» Π² t.me/Javangelion Expert
4 ΠΌΠ°Ρ€Ρ‚Π° 2023, 14:22
УТасный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄.
MaxST1994
Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ 12
27 ΠΌΠ°Ρ€Ρ‚Π° 2016, 00:21
Надо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ final ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ссли ΠΌΡ‹ ΠΏΠΎΠ΄Π°Π΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‚ΠΎ подразумСваСтся, Ρ‡Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ эти ΠΏΠΎΠ΄Π°ΡŽΡ‚ΡΡ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ уничтоТатся послС выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° всС Ρ€Π°Π²Π½ΠΎ, ΡΠ»Ρ‹ΡˆΠ°Π» Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ‚ΠΎΠ½Π° считаСтся ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ эти Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² сигнатурС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ final

Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для setter
public void setNum(int x){}

Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся (Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) ΠΏΠΈΡΠ°Ρ‚ΡŒ
public void setNum(final int x)
{
    this.x = x;
}

ΠŸΠΎΡ‡Π΅ΠΌΡƒ рСкомСндуСтся?
ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, сСттСра Π½Π΅ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎ полю класса, Π° ΠΈΠ½Π°Ρ‡Π΅ ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ
public int setNum(int argx)
{
    x = argx;
}

Π½ΠΎ это ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ считаСтся Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ записи, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ this.x = argx; this ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ выполняСм дСйствия ΠΈΠΌΠ΅Π½Π½ΠΎ с ΠΏΠΎΠ»Π΅ΠΌ класса
ΠΈΠ»ΠΈ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
public int multipleX(int argx) //ΠΌΠ½ΠΎΠΆΠΈΠΌ Ρ… Π½Π° Π°Ρ€Π³Ρ… 
{
    argx*=x;
    return argx;
}

Π’ΠΎΠΆΠ΅ запись ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ Ρ‚ΠΎΠ½Π°
И Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΈΡ… косячков Π½Π΅ Π±Ρ‹Π»ΠΎ пишСм
final
. Π’ΠΎΠ³Π΄Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ нСльзя Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ

public int multipleX(final int argx) //ΠΌΠ½ΠΎΠΆΠΈΠΌ Ρ… Π½Π° Π°Ρ€Π³Ρ… 
{
    this.x*= argx;
    return this.x;
}