Abstraktne klass näeb palju välja nagu liides, kuid kontseptsioon on OOP-i alustajatele pisut segane. Kontseptuaalselt näeb abstraktne klass välja just nagu liides, muidugi, ilma igasuguse teostuseta, kuid neil on erinevuste osas õiglane osa. Kuigi abstraktset klassi saab kas osaliselt või täielikult rakendada, tuleb liides täielikult rakendada. Noh, kõige märkimisväärsem erinevus nende kahe vahel on see, et abstraktsel klassil võib olla vaikimisi juurutamine, samas kui liides on lihtsalt meetodite määratlus, mis sisaldab ainult liikmedeklaratsioone. Arutleme üksikasjalikult mõlema teoreetilise külje üle.
Abstraktne klass on eritüüpi klass, mis toimib teiste klasside alusena ja mida ei saa realiseerida. Abstraktse klassi rakendusloogika tagavad selle tuletatud klassid. Klassi abstraktseks muutmiseks kasutatakse „abstraktset” modifikaatorit, mis tähendab, et sellest tuletatud klassis tuleb rakendada mõni puuduv teostus. See sisaldab nii abstraktseid kui ka mitteabstraktseid liikmeid. Abstraktne klass on ette nähtud põhifunktsioonide pakkumiseks, mida saab mitmest tuletatud klassist edasi jagada ja üle vaadata. Kasulik on vältida igasugust koodi dubleerimist. Need näevad väga sarnased liidestega, kuid lisatud funktsionaalsusega.
Liides seevastu ei ole klass, mis sisaldab ainult funktsionaalsuse allkirja. See on muster, millel puudub rakendamine. Kontseptuaalselt on ainult meetodite määratlus, mis sisaldab ainult liikmete deklaratsiooni. See on tühi kest, mis ei sisalda liikmete rakendamist. See on nagu abstraktne põhiklass, mis sisaldab ainult abstraktseid liikmeid, näiteks meetodeid, sündmusi, indekseerijaid, atribuute jne. Seda ei saa vahetult teostada ja selle liikmeid saab rakendada iga klass. Lisaks saab klass rakendada mitmeid liideseid, kuid klass saab pärida ainult ühe klassi.
Abstraktne klass | Liides |
Abstraktsel klassil võivad olla kõik juurdepääsu modifikaatorid funktsioonide, alamomaduste ja omaduste deklareerimiseks liikmele. | Liidesel pole lubatud juurdepääsu modifikaatoreid funktsioonide, alamomaduste, omaduste jms deklareerimiseks liikmetele. Kõik liikmed on kaudselt avalikud. |
Klass võib kasutada ainult ühte abstraktset klassi. | Klass võib pärida suvalist arvu liideseid. |
Mitu pärimist abstraktses klassis ei toetata. | Liides võib toetada mitut pärimist. |
Tehniliselt on see klass, mis võib sisaldada määratlust ja selle rakendamist või mitte. | Liidesel võib olla ainult funktsionaalsuse allkiri, nii et see on põhimõtteliselt tühi kest. |
Abstraktne klass võib sisaldada liikmeid. Consts, määratletud meetodid ja metoodikad. | Liides võib sisaldada ainult meetodeid ja konspekte. |
See määratleb klassi tuumaidentiteedi ja seda kasutatakse sama andmetüübi objektide kirjeldamiseks. | Seda kasutatakse klassi perifeersete võimete kirjeldamiseks. |
Abstraktse klassi liikmed ei saa olla staatilised, kui nad pole täisliikmed. | Liidese liikmed ei saa olla staatilised. |
See on ideaalne sama tüüpi ja tavapärase käitumisega rakenduste jaoks. | Parem on kasutada liideseid, kui mitu rakendust jagavad ainult meetodi allkirju. |
Sellel võib olla ehitaja deklaratsioon. | Sellel ei saa olla ehitaja deklaratsiooni. |
Abstraktsel klassil on eelnevalt määratletud väljad ja konstandid. | Välju ei saa liidestes määratleda. |
Sellel võivad olla nii abstraktsed kui ka mitteabstraktsed meetodid. | Sellel võib olla ainult abstraktseid meetodeid. |
Mis vahe on abstraktsel klassil ja liidesel? See on tõenäoliselt üks levinumaid küsimusi, mida igal tehnilisel intervjuul küsitakse. Tõenäoliselt leiate suvalisest C # õpetusest hulgaliselt teavet abstraktsete klasside ja liideste kohta, kuid nende kahe erinevuse mõistmine on üsna raske osa. Saate koondada kogu teabe, mida leiate, ja ikkagi ei saa te seda piisavalt. Noh, kontseptuaalselt on mõlemad programmeerimisel kõige olulisemad mõisted ja on üsna samad, kuid funktsionaalsuse osas on nad väga erinevad. Kui abstraktne klass on eritüüpi klass, mis toimib teiste klasside alusena, siis liides on teiselt poolt lihtsalt tühi kest ainult liikmete deklaratsioonidega.