En abstrakt klass ser mycket ut som ett gränssnitt, men konceptet är lite förvirrande för nybörjare av OOP. Konceptuellt ser en abstrakt klass ut som ett gränssnitt, naturligtvis utan genomförande, men de har sin rättvisa andel av skillnaderna. Medan en abstrakt klass kan antingen delvis eller helt implementeras, måste ett gränssnitt implementeras helt. Jo, den mest anmärkningsvärda skillnaden mellan de två är att en abstrakt klass kan ha standardimplementering, medan ett gränssnitt bara är definitionen av metoder som endast innehåller medlemsdeklarationerna. Låt oss diskutera de teoretiska aspekterna av båda detaljerna.
En abstrakt klass är en speciell typ av klass som fungerar som en bas i andra klasser och kan inte instansieras. Implementeringslogiken för en abstrakt klass tillhandahålls av dess härledda klasser. För att göra en klass abstrakt används "abstrakt" modifierare vilket innebär att några saknade implementeringsbehov ska genomföras i klassen härledd från den. Den innehåller både abstrakta och icke-abstrakta medlemmar. En abstrakt klass är avsedd att ge grundläggande funktionalitet som kan delas vidare och överskridas av flera härledda klasser. Det är användbart att undvika någon form av koddubbling. De ser väldigt ut som gränssnitt men med extra funktionalitet.
Ett gränssnitt är å andra sidan inte en klass som endast innehåller signaturen av funktionalitet. Det är ett mönster utan genomförande. Konceptuellt sett är det bara definitionen av metoder som endast innehåller medlemmarnas förklaring. Det är ett tomt skal som inte innehåller genomförandet av dess medlemmar. Det är som en abstrakt basklass som bara innehåller abstrakta medlemmar som metoder, händelser, indexers, egenskaper etc. Det kan inte direktiseras direkt och medlemmarna kan implementeras av någon klass. Dessutom kan flera gränssnitt implementeras av en klass, men en klass kan bara ärva en enda klass.
Abstrakt klass | Gränssnitt |
En abstrakt klass kan ha alla åtkomstmodifierare för medlemsdeklaration av funktioner, subs och egenskaper. | Ett gränssnitt får inte ha åtkomstmodifierare för medlemsdeklaration av funktioner, subs, egenskaper etc. Alla medlemmar antas vara implicit offentligt. |
En klass kan mest använda endast en abstrakt klass. | En klass får ärva ett antal gränssnitt. |
Flera arv stöds inte i abstrakt klass. | Ett gränssnitt kan stödja flera arv. |
Tekniskt sett är det en klass som kanske innehåller både definition och implementering. | Ett gränssnitt kan bara ha signaturen för funktionalitet så det är i grunden ett tomt skal. |
En abstrakt klass kan innehålla medlemmar. consts, definierade metoder och metodstubbar. | Ett gränssnitt kan bara innehålla metoder och consts. |
Det definierar en klasss kärnidentitet och används för att beskriva objekt av samma datatyp. | Det används för att beskriva en klasss perifera förmågor. |
Medlemmar i en abstrakt klass kan inte vara statiska om det inte är en komplett medlem. | Medlemmar av ett gränssnitt kan inte vara statiska. |
Den är idealisk för implementeringar av samma slag och vanligt beteende. | Det är bättre att använda gränssnitt om flera implementeringar bara delar metodens signaturer. |
Det kan ha konstruktördeklaration. | Det kan inte ha en konstruktördeklaration. |
En abstrakt klass har fördefinierade fält och constrants. | Fält kan inte definieras i gränssnitt. |
Det kan ha både abstrakta och icke-abstrakta metoder. | Det kan bara ha abstrakta metoder. |
Vad är skillnaden mellan en abstrakt klass och ett gränssnitt? Detta är förmodligen en av de vanligaste frågorna i någon teknisk intervju. Du kommer sannolikt att hitta en mängd information om abstrakta klasser och gränssnitt i någon C # handledning, men förstå skillnaden mellan de två är ganska svårt. Du kan konsolidera all information du hittar och kan fortfarande inte få nog. Tja, begreppsmässigt är båda de viktigaste termerna i programmering och är ganska lika, men de skiljer sig mycket i funktionalitet. Medan en abstrakt klass är en speciell typ av klass som fungerar som en bas för andra klasser är ett gränssnitt å andra sidan bara ett tomt skal med endast medlemsdeklarationer.