JavaRush /Java блогу /Random-KY /10 абстракттуу класстар жана интерфейстер Java интервью с...

10 абстракттуу класстар жана интерфейстер Java интервью суроолору

Группада жарыяланган
Абстракттуу класстар жана интерфейстер бардык an objectиге багытталган программалоо тилдеринде абдан популярдуу. Жана дээрлик ар бир Java интервьюсунда сиз бул тема боюнча жок дегенде бир суроого туш болосуз. Интерфейстер программалык камсыздоонун дизайнерлеринин арасында популярдуулугунан улам көп айтылып жүрөт, бирок абстракттуу класстар жөнүндө суроолор да мезгил-мезгor менен келип чыгат. Акыркысы көбүнчө Java иштеп чыгууда эки жылдан ашык эмес тажрыйбасы бар кенже иштеп чыгуучулардын кызматына талапкерлерден суралат, ал эми интерфейстерге байланыштуу суроолор көбүнчө тажрыйбасы төрт жылдан ашкан адамдар менен маектешүү учурунда кездешет. Алар көбүнчө Декоратор же Фабрика үлгүлөрү сыяктуу Java дизайн үлгүлөрү жөнүндө башка суроолор менен бирге берилет. 10 абстракттуу класстар жана интерфейстер Java интервью суроолору - 1Бул макалада биз Java интервьюларынын ар кандай деңгээлдеринде берилген абстрактуу класстар жана интерфейстер боюнча жалпы суроолорду карап чыгабыз. Алардын көбү жаңы башталгыч Java программисти үчүн деле кыйын болбошу керек. Булар негизинен таза бorм суроолору, бирок алардын айрымдары, мисалы, абстракттуу класстар менен Java интерфейстеринин ортосундагы айырмачылыктар, же интерфейске абстракттуу классты качан тандоо керек , өтө татаал болушу мүмкүн. Биз сизге тема боюнча ондогон кызыктуу суроолорду сунуштайбыз.
Эгерде сизге интервьюда суроо берилсе же абстракттуу класстар жана интерфейстер жөнүндө кандайдыр бир маанилүү суроо берүүгө туура келсе, бирок ал бул тизмеде жок болсо, аны комментарийлерде бөлүшүңүз.

1. Абстракттуу класстын Java тorнде конструкторлору болушу мүмкүнбү?

Ооба, Javaдагы абстракттуу класста сиз конструкторлорду жарыялап, аныктай аласыз. Абстракттуу класстардын инстанцияларын түзүү мүмкүн болбогондуктан, мындай конструктор конструкторлордун чынжырын түзүүдө, башкача айтканда, конкреттүү ишке ашыруу классынын инстанциясын түзүүдө гана чакырылышы мүмкүн. Бирок интервью алуучу суроо берип жатканын элестетип көрүңүз: эгер сиз баары бир абстрактуу класстын үлгүсүн түзө албасаңыз, конструктордун эмне кереги бар? Кеп аны абстракттуу класста жарыяланган жана ар кандай ишке ашырууда колдонулган жалпы өзгөрмөлөрдүн баштапкы маанилерин коюу үчүн дагы эле колдонсо болот. Эгер сиз эч кандай конструкторду жарыялабасаңыз да, компилятор абстракттуу класска демейки аргументсиз конструкторду кошот. Ансыз сиздин субклассыңыз компиляцияланbyte, анткени кандайдыр бир конструктордогу биринчи билдирүү super()Javaдагы демейки суперкласс конструкторуна кыйыр чалуу болуп саналат.

2. Javaдагы абстракттуу класстар интерфейстерди ишке ашыра алабы? Алар бардык ыкмаларды ишке ашырууга милдеттүүбү?

Ооба, абстракттуу класстар интерфейстерди implements. Алар абстракттуу болгондуктан, бардык ыкмаларды ишке ашыруу талап кылынbyte. Абстракттуу базалык класска жана типти жарыялоо үчүн интерфейске ээ болуу сунушталган практика болуп саналат. Мисал - интерфейс java.util.Listжана ага тиешелүү абстракттуу класс java.util.AbstractList. Ал бардык жалпы ыкмаларды ишке ашыргандыктан AbstractList, конкреттүү ишке ашыруулар (мисалы, LinkedListжана ) интерфейсти түз ArrayListишке ашырса, бардык ыкмаларды ишке ашырууга милдеттүү эмес . ListБул чечим бардык жалпы жүрүм-турумду бир жерде ишке ашыруу үчүн абстракттуу класстын ийкемдүүлүгү менен типти жарыялоо үчүн интерфейсти колдонуунун пайдасын айкалыштырат. Джошуа Блоктун «Java. Натыйжалуу программалоо» Java тorнде интерфейстерди жана абстракттуу класстарды колдонуу темасында эң сонун бөлүм бар, аны жакшыраак түшүнүү үчүн аны изилдөөнүн мааниси бар.

3. Абстракттуу класс акыркы болушу мүмкүнбү?

Жок, ал алbyte. Ачкыч сөз finalкласс иерархиянын башында турганын жана анын тукумдары болушу мүмкүн эместигин билдирет. Ал эми мураскерлери жок абстракттуу класс - бул вакуумдагы тоголок ат, анткени инстанцияны түзүү мүмкүн эмес abstract class. Ошентип, эгерде класс abstractжана экөө тең болсо final, анда анын урпактары жок жана аны түзүү мүмкүн эмес. Java компилятору эгер сиз класс abstractжана final.

4. Javaдагы абстракттуу класста статикалык методдор болушу мүмкүнбү?

Ооба, абстракттуу класстар статикалык ыкмаларды жарыялап, аныктай алат. Javaда статикалык методдорду түзүүнүн жалпы принциптерин сактоо гана зарыл, анткени алар an objectиге багытталган дизайнда жагымсыз, анткени Javaда статикалык методдорду жокко чыгаруу мүмкүн эмес. Абстракттуу класста статикалык методдор өтө сейрек кездешет, бирок ага жүйөлүү себептер бар болсо, аларды колдонууга эч нерсе тоскоол болбойт.

5. Абстракттуу классты түзүү мүмкүнбү?

Жок, сен муну кыла албайсың. Абстракттуу класстын маңызы анын толук эместигинде жана анын урпак класстарында бүткөрүлүшү керек. Башкача айтканда, бул класс колдонууга даяр эмес. Мисалы, кээ бир ыкмаларды ишке ашыруу жетишсиз болушу мүмкүн. Класс колдонууга даяр болбогондуктан, анын an objectисин түзүү мүмкүн эмес. Бирок сиз абстракттуу класстын мураскорлорунун мисалдарын түзө аласыз. Эгерде программа абстракттуу классты түзүүгө аракет кылса, Java компилятору ката кетирет.

6. Абстракттуу класста абстракттуу методдор болушу керекпи?

Жок, абстракттуу класстын абстракттуу ыкмалары болбошу мүмкүн. Сиз Java тorнде класстын абстракттуулугун abstractанын декларациясында ачкыч сөздү колдонуу менен түзө аласыз. Компилятор бул класстын инстанцияларын түзүүгө жол бербөө сыяктуу структуралык чектөөлөрдү ишке ашырат. Айтмакчы, абстракттуу класста же интерфейсте абстракттуу методдор болушу керекпи деген суроо талаштуу. Менин оюмча, абстракттуу класста абстракттуу методдор болушу керек окшойт, анткени абстракттуу классты көргөндө программист биринчи ойлоно турган нерсе. Бул сюрприздерди азайтуу принцибине туура келет.

7. Абстракттуу класс менен Java интерфейсинин ортосунда кандай айырмачылыктар бар?

Бул эң маанилүү жана эң классикалык Java интервью суроолорунун бири. Мен бул суроону Java интервьюларында канча жолу көргөнүмдү санай албайм. Бул суроону кызыктырган нерсе, атап айтканда, өтүнүүчүгө мисал келтирүүгө мүмкүнчүлүк. Абстракция, инкапсуляция, полиморфизм жана тукум куучулук сыяктуу an objectиге багытталган программалоонун негиздери боюнча суроолорго жооп берүү оңой, бирок мындай тымызын нюанстарга келгенде, жумушка талапкерлер көп учурда баш аламан болуп, оюна келген биринчи нерсени айтышат. Бул суроонун жообу өзүнчө макалага татыктуу (айрыкча Java 8деги өзгөрүүлөрдөн кийин), бирок кыскасы:
  • Интерфейс an objectтин жүрүм-турумун (ыкмаларын) гана сүрөттөйт, бирок анын абалы (талаалары) жок (башка public static final), ал эми абстрактуу класста алар болушу мүмкүн.

  • Абстракттуу класс тукум кууйт (узарат), ал эми интерфейс ишке ашырылат (ишке ашырат). Биз бир гана классты мурастай алабыз, бирок каалагандай көп интерфейсти ишке ашыра алабыз. Интерфейс башка интерфейсти/интерфейстерди кеңейте (узартуу) мүмкүн.

  • Абстракттуу класстар "ис-а" байланышы болгондо колдонулат, башкача айтканда, подкласс базалык абстракттуу классты кеңейтет, ал эми интерфейстер бири-бири менен такыр байланышпаган ар кандай класстар тарабынан ишке ашырылышы мүмкүн.

8. Интерфейске абстракттуу класска артыкчылык берүү качан мааниси бар жана тескерисинче?

Бул абстракттуу класстар жана интерфейстер боюнча мурунку суроолордун уландысы. Эгерде сиз алардын синтаксистик айырмачылыктарын билсеңиз, анда бул суроого жооп берүү сизге көйгөй жаратпайт, анткени алар чечим кабыл алууда аныктоочу фактор болуп саналат. Жарыяланган интерфейске жаңы ыкманы кошуу дээрлик мүмкүн болбогондуктан, андан ары өнүктүрүү үчүн потенциалдуу муктаждык болгон учурда абстракттуу классты колдонуу жакшы. Java тorнде абстракттуу класстарды иштеп чыгуу интерфейстерди иштеп чыгууга караганда оңой. Ошо сыяктуу эле, эгерде интерфейсте өтө көп ыкмалар болсо жана алардын бардыгын ишке ашыруу чыныгы баш ооруга айланса, демейки ишке ашыруу үчүн абстракттуу классты түзүү жакшыраак. Бул үлгү Java коллекцияларынын пакетинде колдонулат, абстракттуу AbstractListкласс List. Абстракттуу класстарды колдонуңуз, эгерде:
  • Сиз бир нече тыгыз байланышкан класстар арасында codeду бөлүшкүңүз келет.

  • Сиз абстракттуу классыңызды кеңейткен класстар жалпы көптөгөн методдор же талааларга ээ болушун же public(мисалы, protectedжана private) дан башка кирүү модификаторлорун талап кылышын күтөсүз.

  • Сиз статикалык эмес же не-finalталааларды жарыялагыңыз келет. Бул аларга кире турган жана алар таандык болгон an objectтин абалын өзгөртө турган ыкмаларды аныктоого мүмкүндүк берет.
Интерфейстерди колдонуңуз, эгерде:
  • Интерфейсиңизди ишке ашыруу үчүн байланышы жок класстарды күтөсүз. Мисалы, интерфейстер Comparableжана Cloneableкөптөгөн байланышпаган класстар тарабынан ишке ашырылат.

  • Белгилүү бир маалымат түрүнүн жүрүм-турумун аныктагыңыз келет, бирок аны ким ишке ашыраары сизди кызыктырbyte.

  • Сиз бир нече түрдөгү мурасты колдонгуңуз келет.

9. Java тorнде абстракттуу метод деген эмне?

Абстракттуу метод – денеси жок ыкма. abstractМетод декларациясында ачкыч сөздү колдонуп, аны аныктабастан, жөн гана жарыялайсыз . Java тorндеги интерфейстин ичинде жарыяланган бардык методдор демейки боюнча абстракттуу болуп саналат. Бул жерде Java абстрактуу ыкмасынын мисалы болуп саналат:
public void abstract printVersion();
Эми бул ыкманы ишке ашыруу үчүн абстракттуу классты кеңейтип, бул ыкманы жокко чыгарышыңыз керек.

10. Javaдагы абстракттуу класс методду камтышы мүмкүнбү main?

Ооба, Javaдагы абстракттуу класс методду камтышы мүмкүн , анткени бул дагы бир статикалык метод жана абстракттуу класс сиз аны түзбөсөңүз, mainметодду колдонуу менен аткарылышы мүмкүн . mainМен сага айткым келгени ушул эле. Жана эсиңизде болсун: абстракттуу класстар жана интерфейстер an objectке багытталган талдоо жана долбоорлоо процессиндеги негизги дизайн чечимдери болуп саналат жана алар ийкемдүү системаны түзүүнү кааласаңыз, албетте, этияттык менен колдонулушу керек.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION