JavaRush /Java Blogu /Random-AZ /10 Abstrakt Siniflər və İnterfeyslər Java Müsahibə Sualla...

10 Abstrakt Siniflər və İnterfeyslər Java Müsahibə Sualları

Qrupda dərc edilmişdir
Abstrakt siniflər və interfeyslər bütün obyekt yönümlü proqramlaşdırma dillərində çox populyardır. Demək olar ki, hər Java müsahibəsində bu mövzuda ən azı bir sualla rastlaşırsınız. İnterfeyslər proqram tərtibatçıları arasında populyarlığına görə daha çox xatırlanır, lakin mücərrəd dərslərlə bağlı suallar da vaxtaşırı ortaya çıxır. Sonuncular ən çox Java inkişafında iki ildən çox təcrübəsi olmayan kiçik tərtibatçılar vəzifəsinə müraciət edənlərdən soruşulur, interfeyslərlə bağlı suallar isə təcrübəsi artıq dörd ildən çox olanlarla müsahibə zamanı ən çox rast gəlinir. Onlar ümumiyyətlə Dekorator və ya Zavod nümunələri kimi Java dizayn nümunələri ilə bağlı digər suallarla birlikdə soruşulur. 10 Abstrakt Siniflər və İnterfeyslər Java Müsahibə Sualları - 1Bu yazıda biz müxtəlif səviyyələrdə Java müsahibələrində verilən mücərrəd siniflər və interfeyslərlə bağlı ümumi suallara baxacağıq. Onların əksəriyyəti hətta təcrübəsiz bir Java proqramçısı üçün çətin olmamalıdır. Bunlar, əsasən, xalis bilik suallarıdır, lakin onlardan bəziləri, məsələn, Java-da mücərrəd siniflər və interfeyslər arasındakı fərqlər və ya interfeys üzərində mücərrəd sinifin nə vaxt seçiləcəyi kimi suallar olduqca çətin ola bilər. Mövzu ilə bağlı onlarca maraqlı sualı sizə təqdim edirik.
Əgər müsahibədə sizə nə vaxtsa sual verilibsə və ya mücərrəd dərslər və interfeyslər haqqında hər hansı dəyərli sual vermək məcburiyyətində qalıbsa, lakin bu siyahıda yoxdursa, lütfən bunu şərhlərdə paylaşın.

1. Abstrakt sinfin Java-da konstruktorları ola bilərmi?

Bəli, Java-da mücərrəd sinifdə siz konstruktorları elan edə və müəyyən edə bilərsiniz. Mücərrəd siniflərin nümunələrini yaratmaq mümkün olmadığı üçün belə konstruktoru yalnız konstruktorlar silsiləsi formalaşdırarkən, yəni konkret həyata keçirmə sinfinin nümunəsini yaratdıqda çağırmaq olar. Ancaq təsəvvür edin ki, müsahibimiz sual verir: onsuz da abstrakt sinif nümunəsini yarada bilmirsinizsə, konstruktorun mənası nədir? Məsələ ondadır ki, o, hələ də mücərrəd sinifdə elan edilmiş və müxtəlif tətbiqlər tərəfindən istifadə edilən ümumi dəyişənlərin ilkin dəyərlərini təyin etmək üçün istifadə edilə bilər. Heç bir konstruktor elan etməsəniz belə, kompilyator mücərrəd sinfə defolt arqumentsiz konstruktor əlavə edəcək. Bu olmadan, alt sinifiniz tərtib edilməyəcək, çünki hər hansı bir konstruktorda ilk ifadə super()Java-da standart superklass konstruktoruna gizli çağırışdır.

2. Java-da abstrakt siniflər interfeysləri həyata keçirə bilərmi? Onlar bütün üsulları tətbiq etməlidirlərmi?

Bəli, abstrakt siniflər istifadə edərək interfeysləri həyata keçirə bilər implements. Onlar mücərrəd olduğundan, bütün üsulları həyata keçirmək tələb olunmur. Mücərrəd baza sinfinə və növü elan etmək üçün interfeysə malik olmaq tövsiyə olunan təcrübədir. Buna misal olaraq interfeys java.util.Listvə müvafiq mücərrəd sinfi göstərmək olar java.util.AbstractList. Bütün ümumi metodları həyata keçirdiyi üçün AbstractList, xüsusi tətbiqetmələr (məsələn, LinkedListvə kimi ArrayList) interfeysi birbaşa həyata keçirdikləri təqdirdə bütün metodları həyata keçirməli deyillər List. Bu həll növü elan etmək üçün interfeysdən istifadənin faydasını bütün ümumi davranışları bir yerdə həyata keçirmək üçün mücərrəd sinifin çevikliyi ilə birləşdirir. Joshua Bloch-un “Java. Effektiv Proqramlaşdırma” Java-da interfeyslərdən və mücərrəd siniflərdən istifadə mövzusunda əla fəsildən ibarətdir, daha yaxşı başa düşmək üçün onu öyrənmək məna kəsb edir.

3. Abstrakt sinif yekun ola bilərmi?

Yox, bacarmaz. Açar söz finalo deməkdir ki, sinif iyerarxiyanın yuxarısındadır və nəsilləri ola bilməz. Və varisləri olmayan mücərrəd bir sinif vakuumda sferik bir atdır, çünki bir nümunə yaratmaq mümkün deyil abstract class. Beləliklə, əgər sinif həm abstractvə həm də olarsa final, onda onun nəsli yoxdur və yaradıla bilməz. Java tərtibçisi bir sinif abstractfinal.

4. Java-da abstrakt sinifdə statik metodlar ola bilərmi?

Bəli, abstrakt siniflər statik metodları elan edə və təyin edə bilər. Yalnız Java-da statik metodların yaradılmasının ümumi prinsiplərinə əməl etmək lazımdır, çünki onlar obyekt yönümlü dizaynda arzuolunmazdır, çünki Java-da statik metodları ləğv etmək mümkün deyil. Mücərrəd bir sinifdə statik metodlar çox nadirdir, lakin bunun üçün yaxşı səbəblər varsa, onlardan istifadə etməyə heç nə mane olmur.

5. Mücərrəd sinfi instantlaşdırmaq mümkündürmü?

Xeyr, bunu edə bilməzsiniz. Mücərrəd sinfin mahiyyəti ondan ibarətdir ki, o, tam deyil və onun törəmə siniflərində tamamlanmalıdır. Yəni bu sinif istifadəyə hazır deyil. Məsələn, bəzi üsulların həyata keçirilməsində çatışmazlıq ola bilər. Sinif istifadəyə hazır olmadığı üçün onun obyekti yaradıla bilməz. Lakin siz mücərrəd sinfin varislərinin nümunələrini yarada bilərsiniz. Proqram mücərrəd sinfi yaratmağa çalışarsa, Java tərtibçisi xəta verəcək.

6. Abstrakt sinifdə abstrakt metodların olması zəruridirmi?

Xeyr, mücərrəd sinfin heç bir mücərrəd metodu olmaya bilər. abstractSiz sadəcə olaraq bəyannamədə açar sözdən istifadə etməklə Java-da sinif abstraktını yarada bilərsiniz . Kompilyator istənilən struktur məhdudiyyətləri tətbiq edəcək, məsələn, bu sinfin nümunələrinin yaradılmasına icazə verməmək kimi. Yeri gəlmişkən, mücərrəd sinifdə və ya interfeysdə mücərrəd metodların olması məsələsi mübahisəlidir. Mənə elə gəlir ki, mücərrəd sinifdə mücərrəd metodlar olmalıdır, çünki mücərrəd sinfi görəndə proqramçı ilk düşündüyü şeydir. Bu, sürprizləri minimuma endirmək prinsipinə yaxşı uyğun gəlir.

7. Java-da abstrakt siniflə interfeys arasında hansı fərqlər var?

Bu ən vacib və ən klassik Java müsahibə suallarından biridir. Bütün səviyyələrdə Java müsahibələrində bu sualı neçə dəfə görmüşəm saya bilmirəm. Bu sualı maraqlı edən, xüsusən də abituriyentin nümunə göstərmək imkanıdır. Abstraksiya, inkapsulyasiya, polimorfizm və irsiyyət kimi obyekt yönümlü proqramlaşdırmanın əsasları ilə bağlı suallara cavab vermək asandır, lakin belə incə nüanslara gəlincə, işə müraciət edənlər tez-tez çaşıb qalır və ağlına gələn ilk şeyi deyirlər. Bu sualın cavabı ayrı bir məqaləyə layiqdir (xüsusilə Java 8-də dəyişikliklərdən sonra), lakin qısaca olaraq:
  • İnterfeys obyektin yalnız davranışını (metodlarını) təsvir edir, lakin onun vəziyyətləri (sahələri) yoxdur (istisna public static final), mücərrəd sinif isə onlara malik ola bilər.

  • Mücərrəd sinif miras alınır (genişlənir) və interfeys həyata keçirilir (həyata keçir). Biz yalnız bir sinfi miras ala bilərik, lakin istədiyimiz qədər interfeys tətbiq edə bilərik. İnterfeys başqa interfeysi/interfeysləri genişləndirə (uzatda) bilər.

  • Mücərrəd siniflərdən “is-a” əlaqəsi olduqda istifadə olunur, yəni alt sinif əsas abstrakt sinfi genişləndirir və interfeyslər bir-biri ilə qətiyyən əlaqəsi olmayan müxtəlif siniflər tərəfindən həyata keçirilə bilər.

8. Mücərrəd sinfə interfeysə və əksinə üstünlük vermək nə vaxt məntiqlidir?

Bu, mücərrəd siniflər və interfeyslərlə bağlı əvvəlki sualların davamıdır. Əgər onların sintaktik fərqlərinin nə olduğunu bilirsinizsə, bu suala cavab vermək sizə problem yaratmayacaq, çünki onlar qərar qəbul etməkdə müəyyənedici amildir. Nəşr edilmiş interfeysə yeni metod əlavə etmək demək olar ki, mümkün olmadığından, gələcək inkişaf üçün potensial ehtiyac olduğu təqdirdə mücərrəd sinifdən istifadə etmək daha yaxşıdır. Java-da mücərrəd siniflər hazırlamaq interfeysləri inkişaf etdirməkdən daha asandır. Eyni şəkildə, əgər interfeysdə çoxlu üsullar varsa və onların hamısını həyata keçirmək əsl başağrısına çevrilirsə, standart tətbiq üçün mücərrəd sinif yaratmaq daha yaxşıdır. Bu nümunə Java kolleksiyaları paketində izlənilir, abstrakt AbstractListsinif List. Aşağıdakı hallarda abstrakt siniflərdən istifadə edin:
  • Bir-biri ilə sıx əlaqəli bir neçə sinif arasında kodu paylaşmaq istəyirsiniz.

  • Siz mücərrəd sinifinizi genişləndirən siniflərin ümumi bir çox metod və ya sahəyə malik olmasını və ya public(məsələn, protectedprivate) xaricində giriş dəyişdiriciləri tələb etməsini gözləyirsiniz.

  • Siz qeyri-statik və ya не-finalsahələri elan etmək istəyirsiniz. Bu, mənsub olduqları obyektin vəziyyətini əldə edə və dəyişdirə bilən metodları müəyyən etməyə imkan verir.
Aşağıdakı hallarda interfeyslərdən istifadə edin:
  • Siz əlaqəsiz siniflərin interfeysinizi həyata keçirməsini gözləyirsiniz. Məsələn, interfeyslər ComparableCloneablebir çox əlaqəli olmayan siniflər tərəfindən həyata keçirilir.

  • Müəyyən bir məlumat növünün davranışını müəyyən etmək istəyirsiniz, lakin onu kimin həyata keçirməsi sizi maraqlandırmır.

  • Çox tipli mirasdan istifadə etmək istəyirsiniz.

9. Java-da abstrakt metod nədir?

Mücərrəd üsul bədəni olmayan üsuldur. abstractSiz sadəcə olaraq metod bəyanında açar sözdən istifadə edərək, onu müəyyən etmədən onu elan edirsiniz . Java dilində interfeys daxilində elan edilmiş bütün metodlar standart olaraq mücərrəddir. Java-da mücərrəd metodun bir nümunəsidir:
public void abstract printVersion();
İndi bu metodu həyata keçirmək üçün abstrakt sinfi genişləndirmək və bu metodu ləğv etmək lazımdır.

10. Java-da mücərrəd sinif metodu ehtiva edə bilərmi main?

Bəli, Java-dakı mücərrəd sinif metodu ehtiva edə bilər , çünki bu, başqa bir statik metoddur və mücərrəd sinif siz onu yaratmadığınız müddətcə mainmetoddan istifadə edərək icra edilə bilər . mainSənə demək istədiyim bu idi. Və unutmayın: mücərrəd siniflər və interfeyslər obyekt yönümlü təhlil və dizayn prosesində əsas dizayn qərarlarıdır və çevik bir sistem yaratmaq istəyirsinizsə, əlbəttə ki, ehtiyatla istifadə edilməlidir.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION