Az absztrakt osztály nagyjából úgy néz ki, mint egy interfész, de a koncepció kissé zavaró az OOP kezdõi számára. Fogalmi szempontból egy absztrakt osztály ugyanúgy néz ki, mint egy interfész, megvalósítás nélkül, bár megvan a maga részük a különbségekben. Míg egy absztrakt osztály részben vagy teljesen megvalósítható, az interfészt teljes mértékben végre kell hajtani. Nos, a legjelentősebb különbség a kettő között az, hogy egy absztrakt osztály alapértelmezett megvalósítással rendelkezik, míg az interfész csak a metódusok meghatározása, amely csak a tagok deklarációit tartalmazza. Nézzük meg részletesebben mindkettő elméleti aspektusait.
Az absztrakt osztály egy olyan speciális osztály, amely más osztályok alapjául szolgál, és nem váltható ki. Egy absztrakt osztály megvalósítási logikáját a származtatott osztályok biztosítják. Az osztály elvont előállításához az „elvont” módosítót alkalmazzuk, ami azt jelenti, hogy néhány hiányzó megvalósítást be kell építeni az abból származó osztályba. Mind absztrakt, mind nem absztrakt tagokat tartalmaz. Az absztrakt osztály célja az alapvető funkciók biztosítása, amelyeket tovább lehet megosztani és felülbírálni több származtatott osztály által. Hasznos elkerülni a kódok sokszorosítását. Nagyon hasonlítanak interfészekre, de hozzáadott funkcionalitással.
Ugyanakkor az interfész nem olyan osztály, amely csak a funkcionalitás aláírását tartalmazza. Ez egy minta, végrehajtás nélkül. Fogalmi szempontból csak a módszerek meghatározása tartalmazza csak a tagok nyilatkozatát. Ez egy üres héj, amely nem tartalmazza a tagok végrehajtását. Olyan, mint egy absztrakt alaposztály, amely csak absztrakt tagokat tartalmaz, például módszereket, eseményeket, indexelőket, tulajdonságokat stb. Nem lehet azonnal megvalósítani, és tagjait bármely osztály végrehajthatja. Ezenkívül egy osztályon több interfész is megvalósítható, azonban az osztály csak egyetlen osztályt örökölhet.
Absztrakt osztály | Felület |
Egy absztrakt osztály minden hozzáférési módosítóval rendelkezhet a funkciók, alrendszerek és tulajdonságok tagok deklarálására. | Az interfész nem férhet hozzá hozzáférési módosítókhoz a funkciók, alrendszerek, tulajdonságok stb. Tagok deklarálásához. Az összes tag implicit módon nyilvános.. |
Egy osztály legfeljebb egy elvont osztályt használhat. | Az osztály tetszőleges számú interfészt örökölhet. |
A többszörös öröklés nem támogatott az elvont osztályban. | Egy interfész támogathatja a több öröklést. |
Technikai szempontból ez egy osztály, amely tartalmazhat vagy nem, de tartalmazhatja mind a definíciót, mind annak megvalósítását. | Az interfésznek csak a funkcionalitás aláírása lehet, tehát alapvetően egy üres héj. |
Egy absztrakt osztály tagok lehet. tartalmak, meghatározott módszerek és módszercsonkok. | Az interfész csak módszereket és tartalmakat tartalmazhat. |
Meghatározza az osztály alapvető azonosságát, és ugyanazon adattípus objektumainak leírására szolgál. | Egy osztály perifériás képességeinek leírására szolgál. |
Egy absztrakt osztály tagjai nem lehetnek statikusak, ha teljes jogú tagok. | Az interfész tagjai nem lehetnek statikusak. |
Ideális ugyanolyan típusú és általános viselkedés megvalósításához. | Sokkal jobb interfészeket használni, ha több megvalósítás megosztja a metódusaláírásokat. |
Rendelkezhet kivitelezői nyilatkozattal. | Nem lehet kivitelezői nyilatkozata. |
Az absztrakt osztály előre definiált mezőkkel és konstansokkal rendelkezik. | A mezők nem definiálhatók interfészekben. |
Mind absztrakt, mind nem absztrakt módszerekkel rendelkezhet. | Csak elvont módszerekkel járhat. |
Mi a különbség az absztrakt osztály és az interfész között? Ez valószínűleg az egyik leggyakoribb kérdés, amelyet bármely műszaki interjú során feltettek. Bármely C # oktatóanyagban valószínűleg rengeteg információ található az elvont osztályokról és interfészekről, azonban a kettő közötti különbség megértése elég nehéz. Összevonhatja az összes információt, amelyet megtalál, és még mindig nem kap eléggé. Nos, fogalmi szempontból mindkettő a legfontosabb kifejezés a programozásban, és meglehetősen azonos, azonban funkcionalitásukban nagyon különböznek egymástól. Míg az absztrakt osztály egy olyan speciális osztály, amely más osztályok alapjául szolgál, addig az interfész csupán egy üres héj, kizárólag tagnyilatkozatokkal.