JavaRush /Блоги Java /Random-TG /усулҳо ва синфҳои ниҳоии Java
articles
Сатҳи

усулҳо ва синфҳои ниҳоии Java

Дар гурӯҳ нашр шудааст
Бо ишора кардани усули синф бо тағирдиҳанда final, мо дар назар дорем, ки ҳеҷ як синфи ҳосилшуда наметавонад ин усулро тавассути тағир додани татбиқи дохorи он бекор кунад. Ба ибораи дигар, сухан дар бораи варианти ниҳоии усул меравад. Синфро дар маҷмӯъ метавон ҳамчун final. Усулҳо ва синфҳои ниҳоии Java - 1
final class NoExtending {
// …
}
Синф, ки ҳамчун finalмерос гирифта намешавад ва ҳамаи усулҳои он ғайримустақим амволро ба даст меоранд final. Истифодаи хусусият finalдар эъломияҳои синфҳо ва усулҳо метавонад сатҳи амнияти codeро баланд бардорад. Агар синф бо тағирдиҳанда муҷаҳҳаз бошад final, ҳеҷ кас наметавонад синфро дароз кунад ва эҳтимол дар ин раванд шартномаи онро вайрон кунад. Агар аломате finalусулро ифода кунад, шумо метавонед ба татбиқи дохorи он дар ҳама ҳолатҳо бе тарси "сохтакорӣ" бовар кунед. finalМасалан, ҳангоми эъломияи усуле истифода бурдан мувофиқ аст , ки тафтиши пароли воридкардаи корбарро талаб мекунад, то иҷрои дақиқи он чизеро, ки усул дар ибтидо пешбинӣ кардааст, таъмин кунад. Ҳамлагари эҳтимолӣ наметавонад татбиқи аслии чунин усулро бо роҳи "лағждан" ба барнома versionи бекоркардаи онро тағир диҳад, ки гӯем, ҳамеша арзиши ҳақиқиро бармегардонад, ки бақайдгирии бомуваффақияти корбарро новобаста аз кадом парол нишон медиҳад. воқеан ворид шуд. Шумо ҳақ доред, ки агар вазъияти мушаххас имкон диҳад, минбаъд равед ва finalтамоми синфро ҳамчун синф эълон кунед; усул ValidatePasswordбавосита ҳамон моликиятро ба даст меорад. Истифодаи тағирдиҳанда finalдар декларатсияи метод ё синф ба имкони истифодаи минбаъда ва таҳияи code маҳдудиятҳои ҷиддӣ мегузорад. Истифодаи finalусул дар эъломия нишондиҳандаи боэътимоди он аст, ки татбиқи усул мустақилона ва комилан пурра аст. Барномасозони дигар, ки мехоҳанд синфи шуморо истифода баранд, функсияҳои онро мувофиқи эҳтиёҷоти худ васеъ кунанд, дар интихоби воситаҳо барои расидан ба ҳадафи худ маҳдуд мешаванд ё аз онҳо комилан маҳрум хоҳанд шуд. Бо нишон додани finalсинф дар маҷмӯъ, шумо қобorяти меросии онро ғайрифаъол мекунед ва эҳтимолан фоиданокии онро барои дигарон ба таври назаррас коҳиш медиҳед. Вақте ки шумо тағирдиҳандаро истифода карданӣ ҳастед final, боварӣ ҳосил кунед, ки оё ШУМО барои чунин қурбониҳо омода ҳастед ва оё ин ба онҳо меарзад. Дар бисёр мавридҳо, барои ноил шудан ба сатҳи кофии амнияти code, шарт нест, ки тамоми синфро ҳамчун нишон диҳед - бо нишон додани танҳо унсурҳои сохтории "муҳим" -и онро бо тағирдиҳанда finalнигоҳ доштани васеъшавии синф комилан имконпазир аст . finalДар ин ҳолат, шумо вазифаҳои асосии синфро бетағйир мегузоред ва ҳамзамон ба мероси он бо иловаи аъзои нав, вале бе аз нав муайян кардани "кӯҳна" иҷозат медиҳед. Албатта, майдонҳое, ки тавассути codeи усулҳо дастрас мешаванд, бояд дар навбати худ ҳамчун яке finalтаъин карда шаванд , зеро дар акси ҳол ҳама гуна синфи ҳосилшуда метавонад мундариҷаи худро тағир диҳад, ки ба рафтори усулҳои мувофиқ таъсир мерасонад. Таъсири дигари истифодаи тағирдиҳанда бо содда кардани мушкилоти оптимизатсияи code, ки аз ҷониби компилятор ҳал шудааст, алоқаманд аст. Ин ҳамон чизест, ки вақте ки усуле, ки ҳамчун номидашуда қайд карда нашудааст, рӯй медиҳадfinalprivatefinalfinal, системаи вақти корӣ синфи воқеии an objectро муайян мекунад, зангро бо рамзи мувофиқтарин аз гурӯҳи усулҳои изофабор алоқаманд мекунад ва назоратро ба он code интиқол медиҳад. Аммо агар, масалан, усули getNameдар мисоли синфе, Attrки қаблан баррасӣ шуда буд final, ҳамчун . Дар ҳолати хеле ночиз, ба монанди ҳолати марбут getName, компилятор метавонад танҳо занги методро бо рамзи баданаш иваз кунад. Ин механизм дохилкунии code (inlining) номида мешавад. Ҳангоми истифодаи versionи дохorи усул, getNameду ифодаи зерин комилан якхела иҷро карда мешаванд:
system.out.println("id = " + rose.name);
system.out.println("id = " + rose.getName());
Гарчанде ки ибораҳои дар боло овардашуда баробаранд, дуюмаш ҳам бартарӣ дорад, зеро ин усул getNameба шумо имкон медиҳад, ки ба майдони ном хосияти танҳо барои хондан дода шавад ва codeи синф дараҷаи муайяни абстраксия дошта бошад, ки ба шумо имкон медиҳад озодонатар тағйир диҳед татбиқи синф. Ҳамин схемаи оптимизатсияро компилятор ба усулҳо privateва усулҳо татбиқ кардан мумкин аст statiс, зеро онҳо инчунин ба бекоркунӣ иҷозат намедиҳанд. Истифодаи тағирдиҳанда finalдар эъломияҳои синф инчунин баъзе амалиёти санҷиши намудҳоро самараноктар мекунад. Дар ин ҳолат, бисёре аз чунин амалиётҳоро аллакай дар марҳилаи тартиб додан мумкин аст ва бинобар ин, хатогиҳои эҳтимолӣ хеле пештар ошкор карда мешаванд. Агар компилятор бо истинод ба синф дар матни сарчашма дучор ояд final, он метавонад "боварӣ" дошта бошад, ки an objectи мувофиқ аз навъи муайяншуда аст. Компилятор қодир аст фавран ҷои ишғолкардаи синфро дар иерархияи умумии синф муайян кунад ва дуруст истифода шавад ё на. Агар тағирдиҳанда finalистифода нашавад, санҷишҳои мувофиқ танҳо дар марҳилаи иҷрои барнома гузаронида мешаванд. Машқи 3.4. Оё тавсия дода мешавад, ки тағирдиҳандаи ниҳоиро ба эъломияҳои усул (ва агар ин тавр бошад, кадомашон) аз синфҳои нақлиёт ва мусофиркашонӣ дохил кунед ? Истинод ба манбаи аслӣ: http://src-code.net/metody-i-klassy-final-java
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION