JavaRush /Java blogi /Random-UZ /Savol-javob: Yakuniy darsda mavhum usullarni belgilash mu...

Savol-javob: Yakuniy darsda mavhum usullarni belgilash mumkinmi?

Guruhda nashr etilgan
Bu qiziqarli va muhim savol mening o'quvchilarimdan biriga Java dasturchisi lavozimi uchun telefon orqali suhbat chog'ida so'ralgan. Garchi u Java tilida mavhum sinf yaratishfinal mumkin emasligini bilsa-da , u savolning so'zlashuvidan sarosimaga tushdi. Javob oddiy: yo'q, final-sinfda mavhum usullar bo'lishi mumkin emas. Nega? Chunki Java tili sinfida mavhum usulni e'lon qilganingizdan so'ng, bu sinf avtomatik ravishda mavhum bo'lib qoladi va finalsiz Java tilida abstrakt sinf yarata olmaysiz. Bu Java sinfida mavhum usullar finalbo'lishi mumkin emasligini anglatadi.
Savol-javob: Yakuniy darsda mavhum usullarni belgilash mumkinmi?  - 1
Ko'pgina Java dasturchilari bu savolga javob berishda so'zlar tufayli chalkashib ketishadi. Savol bergan odam umumiy tushuncha bilan tanish bo'lsa ham, u sinf undagi mavhum usulni e'lon qilgandan so'ng mavhum bo'lib qolishini va finalJava'da mavhum sinf yarata olmasligini tushunmasligi mumkin. Bu nuqta bu savolni keng tarqalgan va tez-tez beriladigan savoldan ajratib turadi: Java-da sinfni bir vaqtning o'zida mavhum va yakuniy deb e'lon qilish mumkinmi? final-sinfda mavhum usulni e'lon qilish mumkin emasligini ko'rsatish uchun bir misol kodini ko'rib chiqamiz . Keling , mavhum usulga ega bo'lgan sinf deb Hello.javaataladi . public finalHelloprint()
public final class Hello {
  public abstract void print();
}
Ushbu kodni IDE-ga kiriting, siz quyidagi xato xabarini olasiz, ular Hellomavhum usullarni e'lon qilish uchun mavhum sinf bo'lishi kerakligini aytadilar.
Savol-javob: Yakuniy darsda mavhum usullarni belgilash mumkinmi?  - 2
Savol-javob: Yakuniy darsda mavhum usullarni belgilash mumkinmi?  - 3
Agar siz ushbu kodni Notepad-ga kiritsangiz va buyruq satridan javac yordam dasturidan foydalanib kompilyatsiya qilsangiz, xuddi shu narsa sodir bo'ladi. Java spetsifikatsiyalariga ko'ra, sinf ichida mavhum usulni e'lon qilganingizdan so'ng, u sinf mavhum sinfga aylanadi va siz finalJava'da mavhum sinf yarata olmaganingiz uchun kompilyator xatolik hosil qiladi. Bu Java tilidagi yuqori darajadagi sinflar va ichki o'rnatilgan sinflar uchun ham amal qiladi. Agar siz ichki o'rnatilgan -sinfda mavhum usulni e'lon qilsangiz ham final, xato bir xil bo'ladi. Boshqa tegishli savol: Java-dagi mavhum sinfda statik usullar bo'lishi mumkinmi? Javob: ha, ular mumkin, mavhum sinfda statik usulni e'lon qilishda muammo yo'q, chunki statik usuldan foydalanish uchun siz sinfning namunasini yaratishingiz shart emas, ularni oddiygina sinf nomidan foydalanib chaqirish mumkin. Quyida ko'rsatilganidek, Java-da statik bo'lgan sinfga Hellometodni kiritish uchun misolimizni o'zgartirishimiz mumkin :main()
public abstract class Hello {
  public abstract void print();
  public static void main(String args[]) {
     // Howой-то code
  }
}
Ko'rib turganingizdek, kompilyatsiya xatosi yo'q. Ushbu kod muammosiz kompilyatsiya qilinadi, chunki Java-da siz mavhum sinfda statik usulni xavfsiz tarzda e'lon qilishingiz mumkin. Qisqacha xulosalar -sinfda mavhum usulni e'lon qilish mumkin emas final. Chunki buni qilganingizdan so'ng, sinf Java spetsifikatsiyalariga muvofiq avtomatik ravishda mavhum bo'ladi. Va finalJava-da -class mavhum bo'lishi mumkin emasligi sababli, bu qabul qilinishi mumkin emas va kompilyator sizga xato qilish orqali buni qilishni taqiqlaydi. Ammo siz statik usullarni yakuniy va mavhum sinflarda e'lon qilishingiz mumkin, bu bilan hech qanday muammo yo'q.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION