JavaRush /جاوا بلاگ /Random-SD /جاوا جا آخري طريقا ۽ ڪلاس
articles
سطح

جاوا جا آخري طريقا ۽ ڪلاس

گروپ ۾ شايع ٿيل
ھڪڙي طبقي جي طريقي کي تبديل ڪرڻ سان final، اسان جو مطلب آھي ته ڪو به نڪتل طبقو ھن طريقي کي ختم ڪرڻ جي قابل نه آھي پنھنجي اندروني عمل کي تبديل ڪندي. ٻين لفظن ۾، اسان طريقي جي آخري نسخي بابت ڳالهائي رهيا آهيون. مجموعي طور تي ڪلاس پڻ نشان لڳل ڪري سگھجي ٿو final. جاوا جا آخري طريقا ۽ ڪلاس - 1
final class NoExtending {
// …
}
وراثت ۾ finalنه ٿو ملي ۽ ان جا سڀئي طريقا اڻ سڌي طرح ملڪيت حاصل ڪن ٿا final. طبقن ۽ طريقن جي اعلانن ۾ خصوصيت کي استعمال ڪندي finalڪوڊ سيڪيورٽي جي سطح کي وڌائي سگھي ٿو. جيڪڏهن هڪ طبقو هڪ ترميمي سان ليس آهي final، ڪو به ڪلاس کي وڌائي نٿو سگهي ۽ شايد پروسيس ۾ ان جي معاهدي کي ٽوڙي سگهي. جيڪڏهن هڪ نشاني finalهڪ طريقي جي نشاندهي ڪري ٿي، توهان مڪمل طور تي ان جي اندروني عمل تي ڀروسو ڪري سگهو ٿا سڀني حالتن ۾ "جعلي" جي خوف کان سواء. اهو استعمال ڪرڻ مناسب آهي final، مثال طور، هڪ طريقي جي اعلان ۾ جيڪو صارف پاران داخل ڪيل پاسورڊ جي تصديق ڪرڻ جي ضرورت آهي انهي کي يقيني بڻائڻ لاء ته اهو طريقو اصل ۾ ڪهڙو مقصد آهي. هڪ ممڪن حملو ڪندڙ اهڙي طريقي جي اصل عمل کي تبديل ڪرڻ جي قابل نه هوندو پروگرام ۾ ”سلپ“ ڪندي ان جو هڪ اوور رائڊ ورزن، جيڪو چئو، هميشه سچي قيمت ڏي ٿو، صارف جي ڪامياب رجسٽريشن کي ظاهر ڪري، قطع نظر ڪنهن به صورت ۾. پاسورڊ هن اصل ۾ داخل ڪيو. توهان کي حق آهي، جيڪڏهن مخصوص صورتحال اجازت ڏئي ٿي، ته اڳتي وڌو ۽ finalسڄي طبقي کي هڪ ڪلاس قرار ڏيو؛ طريقو ValidatePasswordاڻ سڌي طرح ساڳي ملڪيت حاصل ڪندو. هڪ طريقو يا طبقي جي اعلان ۾ هڪ ترميمي جو استعمال finalڪوڊ جي وڌيڪ استعمال ۽ ترقي جي امڪان تي سنگين پابنديون لاڳو ڪري ٿو. هڪ اعلان ۾ هڪ طريقي جو استعمال finalهڪ يقيني اشارو آهي ته طريقيڪار تي عمل درآمد خودمختاري ۽ مڪمل طور تي مڪمل آهي. ٻيا پروگرامر جيڪي توھان جي ڪلاس کي استعمال ڪرڻ چاھين ٿا، پنھنجي ضرورتن کي پورو ڪرڻ لاءِ ان جي ڪمن کي وسعت ڏئي، پنھنجي مقصد حاصل ڪرڻ لاءِ وسيلا جي چونڊ ۾ محدود ٿي ويندا يا انھن کان مڪمل طور محروم رھندا. finalھڪڙي طبقي کي مجموعي طور تي نشان ھڻڻ سان ، توھان ان جي قابليت کي وراثت ۾ بند ڪري ڇڏيندا ۽ ممڪن طور تي ٻين لاءِ ان جي افاديت کي گھٽائي ڇڏيندو. جڏهن توهان موڊيفائر استعمال ڪرڻ وارا آهيو final، پڪ ڪريو ته ڇا توهان اهڙين قربانين لاءِ تيار آهيو ۽ ڇا اهو انهن کي ٺاهڻ جي لائق آهي. ڪيترين ئي صورتن ۾، ڪوڊ سيڪيورٽي جي ڪافي سطح حاصل ڪرڻ لاءِ، اهو ضروري ناهي ته پوري طبقي کي نامزد ڪيو وڃي final- اهو بلڪل ممڪن آهي ته ڪلاس جي وسعت کي محفوظ ڪرڻ finalصرف ان جي "نازڪ" ساختي عناصرن کي تبديل ڪندڙ سان نشان لڳايو. انهي حالت ۾، توهان ڪلاس جي بنيادي ڪمن کي برقرار رکندي ۽ ساڳئي وقت ان جي ورثي کي نون ميمبرن جي اضافي سان اجازت ڏين ٿا، پر "پراڻي" کي ٻيهر بيان ڪرڻ کان سواء. يقينن، طريقن جي ڪوڊ ذريعي رسائي حاصل ڪيل شعبن کي finalلازمي طور تي finalيا ته نامزد ڪيو وڃي private، ڇاڪاڻ ته ٻي صورت ۾ ڪو به نڪتل طبقو انهن جي مواد کي تبديل ڪرڻ جي قابل هوندو، لاڳاپيل طريقن جي رويي کي متاثر ڪندي. هڪ ترميمي استعمال ڪرڻ جو ٻيو اثر finalڪوڊ جي اصلاح جي مسئلي کي آسان ڪرڻ سان لاڳاپيل آهي مرتب ڪندڙ طرفان حل ڪيو ويو آهي. اهو ئي ٿئي ٿو جڏهن هڪ طريقو جنهن کي نشان لڳل نه آهي سڏيو ويندو آهيfinal, исполняющая система определяет фактический класс an object, связывает вызов с наиболее подходящим codeом из группы перегруженных методов и передает управление этому codeу. Но если бы, например, метод getName в примере класса Attr, рассмотренном раньше, был обозначен How final, операция обращения к нему, возможно, была бы заметно упрощена. В самом тривиальном случае, подобном тому, который касается getName, компилятор может попросту заменить вызов метода codeом его тела. Такой механизм носит название встраивания codeа (inlining). При использовании inline-версии метода getName два следующих выражения выполняются совершенно одинаково:
system.out.println("id = " + rose.name);
system.out.println("id = " + rose.getName());
Хотя приведенные выражения равнозначны, второе все-таки обладает преимуществом, поскольку метод getName позволяет придать полю name свойство "только для чтения", а codeу класса – некую степень абстракции, которая обеспечивает возможность более свободного изменения реализации класса. Та же схема оптимизации может быть применена компилятором и по отношению к методам private и statiс, так How и они не допускают переопределения. Использование модификатора final в объявлениях классов способствует также повышению эффективности некоторых операций проверки типов. В этом случае многие подобные операции могут быть выполнены уже на стадии компиляции и поэтому потенциальные ошибки выявляются гораздо раньше. Если компилятор встречает в исходном тексте ссылку на класс final, он может быть "уверен", что соответствующий an object относится именно к тому типу, который указан. Компилятор в состоянии сразу определить место, занимаемое классом в общей иерархии классов, и проверить, верно тот используется or нет. Если модификатор final не применяется, соответствующие проверки осуществляются только на стадии выполнения программы. Упражнение 3.4. Целесообразно ли включить в объявления методов (и если да, та Howих именно) классов vehicle и passengervehicle модификатор final? Ссылка на первоисточник: http://src-code.net/metody-i-klassy-final-java
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION