Apstraktna klasa uvelike liči na sučelje, ali koncept je pomalo zbunjujući za početnike OOP-a. Koncepcijski, apstraktna klasa izgleda poput sučelja, naravno, bez ikakve primjene, međutim oni imaju svoj udio razlika. Iako apstraktna klasa može biti djelomično ili u potpunosti implementirana, sučelje se mora u potpunosti implementirati. Pa, najistaknutija razlika između ove dvije je da apstraktna klasa može imati zadanu implementaciju, dok sučelje je samo definicija metoda koja sadrži samo članske deklaracije. Raspravimo u detalje o teorijskim aspektima oba.
Apstraktna klasa je posebna vrsta klase koja djeluje kao osnova drugih klasa i ne može se instancirati. Logika implementacije apstraktne klase osigurana je izvedenim klasama. Da bi se klasa napravila apstraktno, koristi se "apstraktni" modifikator, što znači da neka nedostajuća implementacija treba biti implementirana u klasu izvedenu iz nje. Sadrži i apstraktne i ne-apstraktne članove. Apstraktna klasa namijenjena je pružanju osnovne funkcionalnosti koja se može dijeliti i nadjačati više izvedenih klasa. Korisno je izbjeći bilo kakvo dupliciranje koda. Izgledaju poput sučelja, ali s dodatnom funkcionalnošću.
S druge strane, sučelje nije klasa koja sadrži samo potpis funkcionalnosti. To je obrazac bez implementacije. Koncepcijski gledano, to je samo definicija metoda koja sadrži samo deklaraciju članova. To je prazna ljuska koja ne sadrži implementaciju svojih članova. To je poput apstraktne osnovne klase koja sadrži samo apstraktne članove kao što su metode, događaji, indektori, svojstva itd. Ne može ih se izravno primijeniti, a bilo koje članove može implementirati bilo koja klasa. Uz to, klasa može implementirati više sučelja, međutim, klasa može naslijediti samo jednu klasu.
Sažetak klase | Sučelje |
Apstraktna klasa može imati sve modifikatore pristupa za deklariranje članova o funkcijama, podsvojbama i svojstvima. | Sučelje nije dopušteno da ima modifikatore pristupa za deklariranje članova o funkcijama, podsklopima, svojstvima itd. Svi članovi se pretpostavljaju da su implicitno javni. |
Razreda može koristiti najviše jednu apstraktnu klasu. | Klasa može naslijediti bilo koji broj sučelja. |
Višestruko nasljeđivanje nije podržano u apstraktnoj klasi. | Sučelje može podržati više nasljeđivanja. |
Tehnički je to klasa koja može ili ne mora sadržavati i definiciju i njezinu implementaciju. | Sučelje može imati samo potpis funkcionalnosti, tako da je u osnovi prazna ljuska. |
Sažetak klase može sadržavati članove. consts, definirane metode i dijelovi metoda. | Sučelje može sadržavati samo metode i consts. |
Ona definira temeljni identitet klase i koristi se za opisivanje objekata iste vrste podataka. | Koristi se za opisivanje perifernih sposobnosti klase. |
Članovi apstraktne klase ne mogu biti statični ako nije potpuni član. | Članovi sučelja ne mogu biti statični. |
Idealan je za implementacije iste vrste i uobičajena ponašanja. | Sučelja je bolje koristiti ako nekoliko implementacija dijeli samo potpise metoda. |
Može imati konstrukciju deklaracije. | Ne može imati konstrukcijsku deklaraciju. |
Apstraktna klasa ima unaprijed definirana polja i ograničenja. | Polja se ne mogu definirati u sučeljima. |
Može imati i apstraktne i ne-apstraktne metode. | Može imati samo apstraktne metode. |
Koja je razlika između apstraktne klase i sučelja? Ovo je vjerojatno jedno od najčešćih pitanja postavljenih u bilo kojem tehničkom razgovoru. Vjerojatno ćete naći mnoštvo informacija o apstraktnim klasama i sučeljima u bilo kojem C # udžbeniku, međutim, razumijevanje razlike između njih dva prilično je težak dio. Možete objediniti sve informacije koje možete pronaći i još uvijek ne mogu dobiti dovoljno. Pa, konceptualno su oba najvažnija izraza u programiranju i sasvim su ista, međutim, znatno se razlikuju u pogledu funkcionalnosti. Iako je apstraktna klasa posebna vrsta klase koja djeluje kao osnova za ostale klase, sučelje je, s druge strane, samo prazna ljuska sa samo članskim deklaracijama.