JavaRush /Java blogi /Random-UZ /Yakuniy Java usullari va sinflari
articles
Daraja

Yakuniy Java usullari va sinflari

Guruhda nashr etilgan
Sinf usulini modifikator bilan belgilash orqali finalbiz hech bir hosila sinf bu usulni ichki amalga oshirishni o'zgartirib, bekor qila olmasligini nazarda tutamiz. Boshqacha qilib aytganda, biz usulning yakuniy versiyasi haqida gapiramiz. Sinfni butun sifatida belgilash ham mumkin final. Yakuniy Java usullari va sinflari - 1
final class NoExtending {
// …
}
Deb belgilangan sinf finalmeros qilib olinmaydi va uning barcha usullari bilvosita mulkka ega bo'ladi final. Sinflar va usullar deklaratsiyasida xususiyatdan foydalanish finalkod xavfsizligi darajasini oshirishi mumkin. Agar sinf modifikator bilan jihozlangan bo'lsa final, hech kim sinfni kengaytira olmaydi va bu jarayonda uning shartnomasini buzishi mumkin. Agar belgi finalusulni bildirsa, siz barcha holatlarda "soxtakorlik" dan qo'rqmasdan uning ichki bajarilishiga to'liq ishonishingiz mumkin. finalMasalan, usulni e'lon qilishda foydalanuvchi tomonidan kiritilgan parolni tekshirishni talab qiladigan usul dastlab mo'ljallangan narsaning aniq bajarilishini ta'minlash uchun foydalanish o'rinlidir . Mumkin bo'lgan tajovuzkor dasturga uning bekor qilingan versiyasini "o'tkazish" orqali bunday usulning asl qo'llanilishini o'zgartira olmaydi, bu, aytaylik, har doim haqiqiy qiymatni qaytaradi, bu qanday paroldan qat'i nazar, foydalanuvchini muvaffaqiyatli ro'yxatdan o'tkazishni ko'rsatadi. u haqiqatan ham kirdi. Agar aniq vaziyat imkon bersa, siz oldinga borish va finalbutun sinfni sinf sifatida e'lon qilish huquqiga egasiz; usul ValidatePasswordbilvosita bir xil mulkka ega bo'ladi. Usul yoki sinf deklaratsiyasida modifikatordan foydalanish finalkoddan keyingi foydalanish va ishlab chiqish imkoniyatiga jiddiy cheklovlar qo'yadi. finalDeklaratsiyada usuldan foydalanish usulni amalga oshirish o'z-o'zidan va to'liq to'liq ekanligining ishonchli ko'rsatkichidir. Sizning sinfingizdan foydalanmoqchi bo'lgan, uning funktsiyalarini o'z ehtiyojlariga ko'ra kengaytirmoqchi bo'lgan boshqa dasturchilar o'z maqsadlariga erishish uchun vositalarni tanlashda cheklangan yoki ulardan butunlay mahrum bo'lishadi. finalSinfni butun sifatida belgilash orqali siz uning meros qilib olish qobiliyatini o'chirib qo'yasiz va uning boshqalar uchun foydaliligini sezilarli darajada kamaytiradi. Modifikatordan foydalanmoqchi bo'lganingizda final, SIZ bunday qurbonliklarga tayyormisiz va ularni qilishga arziydimi yoki yo'qligini tekshiring. Ko'pgina hollarda, kod xavfsizligining etarli darajasiga erishish uchun butun sinfni shunday belgilash shart emas - faqat uning "tanqidiy" strukturaviy elementlarini modifikator bilan finalbelgilash orqali sinfning kengaytirilishini saqlab qolish juda mumkin . finalBunday holda, siz sinfning asosiy funktsiyalarini buzilmagan holda qoldirasiz va shu bilan birga yangi a'zolar qo'shilishi bilan, lekin "eski"larini qayta belgilamasdan meros qilib olishga ruxsat berasiz. Albatta, usullarning kodi orqali kirish mumkin bo'lgan maydonlar o'z navbatida har biri finalsifatida belgilanishi kerak , chunki aks holda har qanday hosila sinf o'z mazmunini o'zgartirishi mumkin, bu tegishli usullarning xatti-harakatlariga ta'sir qiladi. Modifikatordan foydalanishning yana bir ta'siri kompilyator tomonidan hal qilingan kodni optimallashtirish muammosini soddalashtirish bilan bog'liq. Belgilanmagan usul chaqirilganda shunday bo'ladifinalprivatefinalfinal, ish vaqti tizimi ob'ektning haqiqiy sinfini aniqlaydi, qo'ng'iroqni ortiqcha yuklangan usullar guruhidan eng mos kod bilan bog'laydi va boshqaruvni shu kodga o'tkazadi. Ammo, masalan, yuqorida muhokama qilingan getNamesinf misolidagi usul Attrsifatida belgilangan bo'lsa final, uni chaqirish jarayoni sezilarli darajada soddalashtirilgan bo'lishi mumkin edi. Eng ahamiyatsiz holatda, masalan, ga tegishli bo'lsa getName, kompilyator oddiygina usul chaqiruvini o'zining asosiy kodi bilan almashtirishi mumkin. Ushbu mexanizm kodni kiritish deb ataladi. Usulning inline versiyasidan foydalanganda getNamequyidagi ikkita ifoda aynan bir xil tarzda bajariladi:
system.out.println("id = " + rose.name);
system.out.println("id = " + rose.getName());
Yuqoridagi iboralar ekvivalent bo'lsa-da, ikkinchisi hamon afzalliklarga ega, chunki usul getNamenom maydoniga faqat o'qish uchun xususiyatni berishga imkon beradi va sinf kodi ma'lum darajada abstraktsiyaga ega bo'lib, bu sizga erkinroq o'zgartirish imkonini beradi. sinfni amalga oshirish. Xuddi shu optimallashtirish sxemasi kompilyator tomonidan privateva usullariga qo'llanilishi mumkin statiс, chunki ular ham bekor qilishga ruxsat bermaydi. Sinf deklaratsiyasida modifikatordan foydalanish, finalshuningdek, ayrim turdagi tekshirish operatsiyalarini samaraliroq qiladi. Bunday holda, ko'plab bunday operatsiyalar kompilyatsiya bosqichida amalga oshirilishi mumkin va shuning uchun mumkin bo'lgan xatolar ancha oldin aniqlanadi. Agar kompilyator manba matnida sinfga havolaga duch kelsa final, mos keladigan ob'ekt belgilangan turdagi ekanligiga "ishonch" berishi mumkin. Kompilyator sinfning umumiy ierarxiyadagi o'rnini darhol aniqlay oladi va undan to'g'ri foydalanilgan yoki yo'qligini tekshiradi. Agar modifikator finalqo'llanilmasa, tegishli tekshiruvlar faqat dasturni bajarish bosqichida amalga oshiriladi. 3.4- mashq . Yakuniy modifikatorni transport vositalari va yo'lovchilar sinflarining uslub deklaratsiyasiga (agar shunday bo'lsa, qaysilari) kiritish tavsiya etiladi ? Asl manbaga havola: http://src-code.net/metody-i-klassy-final-java
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION