JavaRush /Java blogi /Random-UZ /10 abstrakt sinflar va interfeyslar Java intervyu savolla...

10 abstrakt sinflar va interfeyslar Java intervyu savollari

Guruhda nashr etilgan
Abstrakt sinflar va interfeyslar barcha ob'ektga yo'naltirilgan dasturlash tillarida juda mashhur. Va deyarli har bir Java intervyusida siz ushbu mavzu bo'yicha kamida bitta savolga duch kelasiz. Interfeyslar dasturiy ta'minot dizaynerlari orasida mashhurligi tufayli tez-tez tilga olinadi, ammo mavhum sinflar haqidagi savollar ham vaqti-vaqti bilan paydo bo'ladi. Ikkinchisi ko'pincha Java-ni ishlab chiqishda ikki yildan ortiq bo'lmagan tajribaga ega bo'lgan kichik dasturchilar lavozimiga da'vogarlardan so'raladi, interfeyslar haqidagi savollar esa tajribasi to'rt yildan ortiq bo'lganlar bilan suhbat paytida ko'pincha uchraydi. Ular odatda Java dizayn naqshlari haqidagi boshqa savollar bilan birgalikda so'raladi, masalan, Dekorator yoki Zavod naqshlari. 10 ta abstrakt sinflar va interfeyslar Java intervyu savollari - 1Ushbu maqolada biz Java intervyularining turli darajalarida berilgan mavhum sinflar va interfeyslar bo'yicha umumiy savollarni ko'rib chiqamiz. Ularning ko'pchiligi hatto boshlang'ich Java dasturchisi uchun ham qiyin bo'lmasligi kerak. Bular asosan bilimga oid savollardir, lekin ulardan ba'zilari, masalan, Java-dagi mavhum sinflar va interfeyslar o'rtasidagi farqlar yoki interfeysdan mavhum sinfni qachon tanlash kerakligi juda qiyin bo'lishi mumkin. Sizga mavzu bo'yicha o'nlab qiziqarli savollarni taklif qilamiz.
Agar intervyuda sizga biron bir savol berilgan bo'lsa yoki mavhum sinflar va interfeyslar haqida biron bir foydali savol berishingiz kerak bo'lsa, lekin u ushbu ro'yxatda bo'lmasa, uni sharhlarda baham ko'ring.

1. Abstrakt sinf Java tilida konstruktorlarga ega bo'lishi mumkinmi?

Ha, Java-dagi mavhum sinfda siz konstruktorlarni e'lon qilishingiz va belgilashingiz mumkin. Mavhum sinflar misollarini yaratish mumkin emasligi sababli, bunday konstruktorni faqat konstruktorlar zanjirini shakllantirishda, ya'ni muayyan amalga oshirish sinfining namunasini yaratishda chaqirish mumkin. Tasavvur qiling-a, suhbatdosh o'shanda savol beradi: agar siz baribir mavhum sinfning namunasini yarata olmasangiz, konstruktorning nima keragi bor? Gap shundaki, u hali ham mavhum sinfda e'lon qilingan va turli xil ilovalar tomonidan ishlatiladigan umumiy o'zgaruvchilarning boshlang'ich qiymatlarini o'rnatish uchun ishlatilishi mumkin. Hech qanday konstruktorni e'lon qilmasangiz ham, kompilyator mavhum sinfga standart argumentsiz konstruktorni qo'shadi. Busiz sizning pastki sinfingiz kompilyatsiya qilinmaydi, chunki har qanday konstruktordagi birinchi bayonot super()Java'dagi standart superklass konstruktoriga yashirin chaqiruvdir.

2. Java tilidagi abstrakt sinflar interfeyslarni amalga oshira oladimi? Ular barcha usullarni amalga oshirishlari kerakmi?

Ha, mavhum sinflar interfeyslarni implements. Ular mavhum bo'lganligi sababli, barcha usullarni amalga oshirish talab qilinmaydi. Mavhum tayanch sinfga va turni e'lon qilish uchun interfeysga ega bo'lish tavsiya etilgan amaliyotdir. Misol - interfeys java.util.Listva tegishli mavhum sinf java.util.AbstractList. U barcha umumiy usullarni amalga oshirganligi sababli AbstractList, maxsus ilovalar (masalan, LinkedListva ArrayListkabi) interfeysni to'g'ridan-to'g'ri amalga oshirgan bo'lsa, barcha usullarni amalga oshirishi shart emas List. Ushbu yechim barcha umumiy xatti-harakatlarni bir joyda amalga oshirish uchun mavhum sinfning moslashuvchanligi bilan turni e'lon qilish uchun interfeysdan foydalanishning afzalliklarini birlashtiradi. Joshua Blochning "Java. Samarali dasturlash" Java-da interfeyslar va mavhum sinflardan foydalanish mavzusiga oid ajoyib bobga ega, yaxshiroq tushunish uchun uni o'rganish mantiqiy.

3. Abstrakt sinf yakuniy bo'lishi mumkinmi?

Yo'q, qila olmaydi. Kalit so'z finalsinf ierarxiyaning eng yuqori pog'onasida ekanligini va uning avlodlari bo'lmasligini anglatadi. Va merosxo'rsiz mavhum sinf - bu vakuumdagi sharsimon ot, chunki misol yaratish mumkin emas abstract class. Shunday qilib, agar sinf ikkala abstractva ham bo'lsa final, unda uning avlodlari yo'q va uni yaratib bo'lmaydi. Java kompilyatori siz sinf abstractva final.

4. Java tilidagi abstrakt sinf statik usullarga ega bo'lishi mumkinmi?

Ha, mavhum sinflar statik usullarni e'lon qilishi va belgilashi mumkin. Faqat Java-da statik usullarni yaratishning umumiy tamoyillariga amal qilish kerak, chunki ular ob'ektga yo'naltirilgan dizaynda istalmagan, chunki Java-da statik usullarni bekor qilish mumkin emas. Mavhum sinfdagi statik usullar juda kam uchraydi, ammo buning uchun yaxshi sabablar mavjud bo'lsa, ulardan foydalanishga hech narsa to'sqinlik qilmaydi.

5. Abstrakt sinfni instantsiyalash mumkinmi?

Yo‘q, buni qilolmaysiz. Abstrakt sinfning mohiyati shundaki, u to'liq emas va u o'z avlod sinflarida to'ldirilishi kerak. Ya'ni, bu sinf foydalanishga tayyor emas. Masalan, ba'zi usullarni amalga oshirishning etishmasligi mumkin. Sinf foydalanishga tayyor bo'lmagani uchun uning ob'ektini yaratib bo'lmaydi. Lekin siz mavhum sinfning merosxo'rlari misollarini yaratishingiz mumkin. Agar dastur mavhum sinfni yaratishga harakat qilsa, Java kompilyatori xato qiladi.

6. Abstrakt sinf uchun mavhum usullar bo'lishi shartmi?

Yo'q, mavhum sinfda mavhum usullar bo'lmasligi mumkin. abstractSiz Java-da uning deklaratsiyasidagi kalit so'zdan foydalanib, sinf abstraktini yaratishingiz mumkin . Kompilyator har qanday tizimli cheklovlarni amalga oshiradi, masalan, ushbu sinfning namunalarini yaratishga ruxsat bermaslik. Aytgancha, mavhum sinf yoki interfeysda mavhum usullar bo'lishi kerakmi degan savol munozarali. Menimcha, mavhum sinf mavhum usullarga ega bo'lishi kerak, chunki mavhum sinfni ko'rganda dasturchi birinchi bo'lib o'ylaydigan narsa. Bu kutilmagan hodisalarni minimallashtirish tamoyiliga juda mos keladi.

7. Java tilidagi abstrakt sinf va interfeys o‘rtasidagi farqlar nimada?

Bu eng muhim va eng klassik Java intervyu savollaridan biridir. Men bu savolni barcha darajadagi Java intervyularida necha marta ko'rganimni hisoblay olmayman. Bu savolni qiziqtirgan narsa, xususan, abituriyentga misol keltirish imkoniyatidir. Ob'ektga yo'naltirilgan dasturlash asoslari, masalan, abstraksiya, inkapsulyatsiya, polimorfizm va merosxo'rlik kabi savollarga javob berish oson, ammo bunday nozik nuanslar haqida gap ketganda, ishga da'vogarlar ko'pincha chalkashib ketishadi va xayoliga kelgan birinchi narsani aytadilar. Bu savolga javob alohida maqolaga loyiqdir (ayniqsa Java 8-dagi o'zgarishlardan keyin), ammo qisqasi:
  • Interfeys ob'ektning faqat xatti-harakatini (usullarini) tavsiflaydi, lekin unda holatlar (maydonlar) yo'q ( bundan mustasno public static final), mavhum sinf esa ularga ega bo'lishi mumkin.

  • Abstrakt sinf meros qilib olinadi (kengaytiriladi) va interfeys amalga oshiriladi (amalga oshiriladi). Biz faqat bitta sinfni meros qilib olishimiz mumkin, lekin biz xohlagancha ko'p interfeyslarni amalga oshiramiz. Interfeys boshqa interfeys/interfeyslarni kengaytirishi (kengaytirishi) mumkin.

  • Mavhum sinflar "is-a" munosabati mavjud bo'lganda qo'llaniladi, ya'ni pastki sinf asosiy abstrakt sinfni kengaytiradi va interfeyslar bir-biriga umuman aloqador bo'lmagan turli sinflar tomonidan amalga oshirilishi mumkin.

8. Qachon mavhum sinfni interfeysga va aksincha afzal ko'rish mantiqan to'g'ri keladi?

Bu mavhum sinflar va interfeyslar bo'yicha oldingi savollarning davomi. Agar siz ularning sintaktik farqlarini bilsangiz, bu savolga javob berish sizga muammo tug'dirmaydi, chunki ular qaror qabul qilishda hal qiluvchi omil hisoblanadi. Nashr qilingan interfeysga yangi usul qo'shish deyarli mumkin emasligi sababli, keyingi rivojlanish uchun potentsial zarurat tug'ilganda mavhum sinfdan foydalanish yaxshiroqdir. Java-da mavhum sinflarni ishlab chiqish interfeyslarni ishlab chiqishdan osonroqdir. Xuddi shunday, agar interfeys juda ko'p usullarga ega bo'lsa va ularning barchasini amalga oshirish haqiqiy bosh og'rig'iga aylansa, standart amalga oshirish uchun mavhum sinfni yaratish yaxshiroqdir. Ushbu naqsh Java kolleksiyalari to'plamida kuzatiladi, mavhum AbstractListsinf List. Mavhum sinflardan foydalaning, agar:
  • Kodni bir-biriga yaqin bo'lgan bir nechta sinflar o'rtasida almashishni xohlaysiz.

  • publicMavhum sinfingizni kengaytiradigan sinflar umumiy usullar yoki maydonlarga ega bo'lishini yoki (masalan, protectedva ) dan boshqa kirish modifikatorlarini talab qilishini kutasiz private.

  • не-finalSiz statik bo'lmagan yoki maydonlarni e'lon qilmoqchisiz . Bu sizga kirish va ular tegishli bo'lgan ob'ektning holatini o'zgartirishi mumkin bo'lgan usullarni aniqlash imkonini beradi.
Quyidagi hollarda interfeyslardan foydalaning:
  • Sizning interfeysingizni amalga oshirish uchun aloqador bo'lmagan sinflarni kutasiz. Masalan, interfeyslar Comparableva Cloneablebir-biriga bog'liq bo'lmagan ko'plab sinflar tomonidan amalga oshiriladi.

  • Siz ma'lum bir turdagi ma'lumotlarning xatti-harakatlarini aniqlamoqchisiz, lekin uni kim amalga oshirishi sizni qiziqtirmaydi.

  • Bir nechta turdagi merosdan foydalanmoqchisiz.

9. Java tilida abstrakt usul nima?

Mavhum usul - tanasi bo'lmagan usul. abstractSiz usul deklaratsiyasida kalit so'zdan foydalanib, uni aniqlamasdan oddiygina usulni e'lon qilasiz . Java tilidagi interfeys ichida e'lon qilingan barcha usullar sukut bo'yicha mavhumdir. Java-da mavhum usulga misol:
public void abstract printVersion();
Endi ushbu usulni amalga oshirish uchun siz mavhum sinfni kengaytirishingiz va bu usulni bekor qilishingiz kerak.

10. Java tilidagi abstrakt sinf metodni o'z ichiga olishi mumkinmi main?

Ha, Java-dagi mavhum sinf metodni o'z ichiga olishi mumkin main, chunki bu boshqa statik usul va mavhum sinfni mainsiz uni yaratmaguningizcha metod yordamida bajarish mumkin. Sizga aytmoqchi bo'lganim shu edi. Va esda tuting: mavhum sinflar va interfeyslar ob'ektga yo'naltirilgan tahlil va dizayn jarayonida asosiy dizayn qarorlari bo'lib, ulardan ehtiyotkorlik bilan foydalanish kerak, albatta, agar siz moslashuvchan tizim yaratmoqchi bo'lsangiz.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION