Abstrakti klasė atrodo daugmaž kaip sąsaja, tačiau sąvoka šiek tiek painioja pradedančiuosius OOP. Konceptualiai abstrakti klasė atrodo kaip sąsaja, žinoma, be jokio diegimo, tačiau jos turi gana didelę skirtumų dalį. Nors abstrakčią klasę galima įgyvendinti iš dalies arba visiškai, sąsaja turi būti visiškai įgyvendinta. Labiausiai pastebimas skirtumas tarp šių dviejų yra tas, kad abstrakti klasė gali būti įdiegta pagal nutylėjimą, o sąsaja yra tik metodų apibrėžimas, kuriame yra tik narių deklaracijos. Aptarkime abiejų teorinius aspektus.
Abstraktioji klasė yra ypatinga klasės rūšis, kuri veikia kaip kitų klasių pagrindas ir negali būti įgyvendinta. Abstrakčios klasės diegimo logiką teikia išvestinės klasės. Kad klasė taptų abstrakčia, naudojamas „abstrakčiojo“ modifikatorius, o tai reiškia, kad iš jo gautoje klasėje reikia įdiegti kai kuriuos trūkstamus įgyvendinimus. Jame yra ir abstrakčių, ir neabstraktų narių. Abstrakčioji klasė yra skirta suteikti pagrindines funkcijas, kuriomis gali būti toliau dalijamasi ir kurias galima pakeisti keliomis išvestinėmis klasėmis. Naudinga vengti bet kokio kodo dubliavimo. Jie labai panašūs į sąsajas, tačiau turi papildomų funkcijų.
Kita vertus, sąsaja nėra klasė, kurioje yra tik parašas apie funkcionalumą. Tai modelis be įgyvendinimo. Konceptualiai kalbant, tik metodų apibrėžimas apima tik narių deklaraciją. Tai tuščias apvalkalas, kuriame nėra narių įgyvendinimo. Tai tarsi abstrakti pagrindinė klasė, kurioje yra tik abstraktūs nariai, tokie kaip metodai, įvykiai, rodyklės, savybės ir pan. Jos negalima tiesiogiai realizuoti, o jos narius gali įgyvendinti bet kuri klasė. Be to, klasė gali įgyvendinti kelias sąsajas, tačiau klasė gali paveldėti tik vieną klasę.
Anotacija | Sąsaja |
Abstrakčioji klasė gali turėti visus prieigos modifikatorius, kad galėtų deklaruoti funkcijas, poskyrius ir savybes. | Neleidžiama turėti sąsajos prieigos modifikatorių nariams deklaruoti funkcijas, poskyrius, savybes ir pan. Visi nariai laikomi netiesiogiai viešais.. |
Klasė gali naudoti tik vieną abstrakčią klasę. | Klasė gali paveldėti bet kokį sąsajų skaičių. |
Keli paveldėjimai abstrakčioje klasėje nepalaikomi. | Sąsaja gali palaikyti kelis paveldėjimus. |
Techniškai tai yra klasė, kurioje gali nebūti apibrėžimo ir jo įgyvendinimo. | Sąsaja gali turėti tik funkcionalumo parašą, taigi iš esmės tai yra tuščias apvalkalas. |
Abstrakčioje klasėje gali būti narių. konspektai, apibrėžti metodai ir metodo fragmentai. | Sąsajoje gali būti tik metodai ir konspektai. |
Tai apibrėžia pagrindinę klasės tapatybę ir yra naudojamas aprašyti to paties tipo duomenų objektus. | Jis naudojamas apibūdinti periferinius klasės sugebėjimus. |
Abstrakčios klasės nariai negali būti statiški, nebent jie būtų tikri nariai. | Sąsajos nariai negali būti statiniai. |
Tai idealiai tinka įgyvendinti tokio paties pobūdžio ir įprastą elgesį. | Geriau naudoti sąsajas, jei keli įgyvendinimai dalijasi tik metodo parašais. |
Jis gali turėti konstruktoriaus deklaraciją. | Ji negali turėti konstruktoriaus deklaracijos. |
Abstrakčioji klasė turi iš anksto apibrėžtus laukus ir konstantas. | Laukų negalima apibrėžti sąsajose. |
Tai gali turėti tiek abstrakčius, tiek abstrakčius metodus. | Tai gali turėti tik abstrakčius metodus. |
Kuo skiriasi abstrakti klasė ir sąsaja? Tai turbūt vienas iš dažniausiai užduodamų klausimų per bet kurį techninį interviu. Tikėtina, kad bet kuriame C # vadove rasite gausybę informacijos apie abstrakčias klases ir sąsajas, tačiau suprasti skirtumą tarp šių dviejų dalykų yra gana sunku. Galite konsoliduoti visą informaciją, kurią galite rasti, tačiau vis dar negalite jos gauti. Na, konceptualiai abu yra patys svarbiausi programavimo terminai ir yra gana vienodi, tačiau jie labai skiriasi funkcionalumu. Nors abstrakti klasė yra ypatinga klasės rūšis, kuri veikia kaip pagrindas kitoms klasėms, sąsaja, kita vertus, yra tik tuščias apvalkalas su tik narių deklaracijomis..