JavaRush /Java блогы /Random-KK /соңғы Java әдістері мен сыныптары
articles
Деңгей

соңғы Java әдістері мен сыныптары

Топта жарияланған
Класс әдісін модификатормен белгілеу арқылы finalбіз ешбір туынды класс оның ішкі орындалуын өзгерту арқылы бұл әдісті қайта анықтай алмайтынын білдіреміз. Басқаша айтқанда, біз әдістің соңғы нұсқасы туралы айтып отырмыз. Жалпы сынып ретінде де белгілеуге болады final. соңғы Java әдістері мен сыныптары - 1
final class NoExtending {
// …
}
Белгіленген сынып finalмұраланбайды және оның барлық әдістері сипатты жанама түрде алады final. Сыныптар мен әдістердің мәлімдемелеріндегі мүмкіндікті пайдалану finalcode қауіпсіздігінің деңгейін жоғарылатуы мүмкін. Егер сынып модификаторымен жабдықталған болса final, ешкім сыныпты ұзарта алмайды және процесте оның келісімшартын бұзуы мүмкін. Егер белгі finalәдісті білдірсе, сіз «жалған жасаудан» қорықпай барлық жағдайларда оның ішкі орындалуына толық сене аласыз. finalМысалы, әдіс декларациясында қолданушы енгізген құпия сөзді тексеруді талап ететін әдіс бастапқыда нені көздегенін дәл орындауды қамтамасыз ету үшін пайдалану орынды . Ықтимал шабуылдаушы мұндай әдістің бастапқы іске асырылуын бағдарламаға оның қайта анықталған нұсқасын «сығу» арқылы өзгерте алмайды, ол, айталық, қандай құпия сөзге қарамастан, пайдаланушының сәтті тіркелгенін көрсететін әрқашан шын мәнін қайтарады. ол шынымен кірді. finalСіз, егер нақты жағдай мүмкіндік берсе, одан әрі өтуге және бүкіл сыныпты сынып деп жариялауға құқығыңыз бар ; әдіс ValidatePasswordжанама түрде бірдей қасиетке ие болады. Әдісте немесе класс декларациясында модификаторды пайдалану finalcodeты одан әрі пайдалану және дамыту мүмкіндігіне елеулі шектеулер қояды. Декларацияда әдісті пайдалану finalәдісті іске асыру өздігінен және толық аяқталғандығының сенімді көрсеткіші болып табылады. Сіздің сыныпты пайдаланғысы келетін, оның функцияларын өз қажеттіліктеріне сай кеңейтетін басқа бағдарламашылар өз мақсаттарына жету құралдарын таңдауда шектеледі немесе олардан толығымен айырылады. Сыныпты тұтастай белгілеу арқылы finalоның мұрагерлік қабілетін өшіресіз және оның басқалар үшін пайдалылығын айтарлықтай төмендетуі мүмкін. Модификаторды пайдаланғалы жатқанда final, СІЗДІҢ мұндай құрбандықтарға дайын екеніңізді және оларды жасауға тұрарлық па екенін тексеріңіз. Көптеген жағдайларда code қауіпсіздігінің жеткілікті деңгейіне жету үшін бүкіл классты келесідей белгілеудің қажеті жоқ - модификатормен оның тек «критикалық» құрылымдық элементтерін finalбелгілеу арқылы сыныптың кеңеюін сақтауға әбден болады . finalБұл жағдайда сіз сыныптың негізгі функцияларын өзгеріссіз қалдырасыз және сонымен бірге жаңа мүшелерді қосу арқылы оның мұрагерлігіне рұқсат бересіз, бірақ «ескілерді» қайта анықтамайсыз. Әрине, әдістердің codeы арқылы қол жеткізілетін өрістер өз кезегінде немесе finalретінде белгіленуі керек , өйткені әйтпесе кез келген туынды класс сәйкес әдістердің әрекетіне әсер ете отырып, олардың мазмұнын өзгерте алады. Модификаторды қолданудың тағы бір әсері компилятор шешетін codeты оңтайландыру мәселесін жеңілдетуге байланысты. Белгіленбеген әдіс шақырылған кезде осылай боладыfinalprivatefinalfinal, орындалу уақыты жүйесі нысанның нақты сыныбын анықтайды, шақыруды шамадан тыс жүктелген әдістер тобынан ең сәйкес codeпен байланыстырады және басқаруды сол codeқа тасымалдайды. Бірақ, мысалы, бұрын талқыланған getNameсынып мысалындағы әдіс Attrретінде тағайындалған болса final, оны шақыру әрекеті айтарлықтай жеңілдетілген болуы мүмкін. Ең тривиальды жағдайда, мысалы -ға қатысты getName, компилятор әдіс шақыруын өзінің негізгі codeымен жай ғана ауыстыра алады. Бұл механизм codeты енгізу деп аталады. Әдістің кірістірілген нұсқасын пайдаланған кезде getNameкелесі екі өрнек бірдей орындалады:
system.out.println("id = " + rose.name);
system.out.println("id = " + rose.getName());
Жоғарыда келтірілген өрнектер баламалы болғанымен, екіншісінің артықшылығы бар, өйткені әдіс getNameатау өрісіне тек оқуға арналған сипат беруге мүмкіндік береді, ал класс codeы абстракцияның белгілі бір дәрежесіне ие болады, бұл сізге еркін өзгертуге мүмкіндік береді. сыныпты жүзеге асыру. Бірдей оңтайландыру схемасын компилятор privateжәне әдістеріне қолдана алады statiс, өйткені олар да қайта анықтауға мүмкіндік бермейді. Класс мәлімдемелерінде модификаторды пайдалану finalкейбір типті тексеру әрекеттерін тиімдірек етеді. Бұл жағдайда көптеген мұндай операцияларды құрастыру сатысында орындауға болады, сондықтан ықтимал қателер әлдеқайда ертерек анықталады. Егер компилятор бастапқы мәтіндегі сыныпқа сілтемені кездестірсе final, сәйкес нысанның көрсетілген типте екеніне "сенімді" болуы мүмкін. Компилятор класстың жалпы иерархиядағы орнын бірден анықтай алады және оның дұрыс пайдаланылғанын немесе қолданылмағанын тексере алады. Егер модификатор 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