Апстрактна класа личи на много интерфејса, али концепт је помало збуњујући за почетнике ООП-а. Концепцијски, апстрактна класа изгледа баш као интерфејс, наравно, без икакве примене, међутим они имају свој правични део разлика. Иако апстрактна класа може бити дјеломично или у потпуности имплементирана, интерфејс мора бити потпуно имплементиран. Па, најистакнутија разлика између ове две је та што апстрактна класа може имати подразумевану имплементацију, док интерфејс представља само дефиницију метода која садржи само чланске декларације. Расправимо у детаље о теоријским аспектима оба.
Апстрактна класа је посебна врста класе која делује као основа других класа и не може се инстанцирати. Логика имплементације апстрактне класе обезбеђена је изведеним класама. Да би се класа направила апстрактно, користи се "апстрактни" модификатор, што значи да нека недостајућа имплементација мора бити имплементирана у класу изведену из ње. Садржи и апстрактне и не-апстрактне чланове. Апстрактна класа је намијењена пружању основне функционалности која се може даље дијелити и надјачати више изведених класа. Корисно је избећи било какво дуплирање кода. Изгледају попут интерфејса али са додатном функционалношћу.
Интерфејс, с друге стране, није класа која садржи само потпис функционалности. То је образац без имплементације. Концепцијски гледано, то је само дефиниција метода која садржи само декларацију чланова. То је празна љуска која не садржи имплементацију својих чланова. То је попут апстрактне основне класе која садржи само апстрактне чланове као што су методе, догађаји, индектори, својства итд. Не може се директно инстанцирати, а било које класе може имплементирати било која класа. Поред тога, класа може имплементирати више интерфејса, међутим, класа може наследити само једну класу.
Сажетак | Интерфејс |
Апстрактна класа може имати све модификаторе приступа за декларирање чланова о функцијама, подпописима и својствима. | Интерфејсу није дозвољено да има модификаторе приступа за декларирање чланова о функцијама, подсклопима, својствима итд. Сви чланови се претпостављају да су имплицитно јавни. |
Класа може највише користити само једну апстрактну класу. | Класа може наследити било који број интерфејса. |
Вишеструко насљеђивање није подржано у апстрактној класи. | Интерфејс може подржати вишеструко наслеђивање. |
Технички је то класа која може или не мора садржавати и дефиницију и њену имплементацију. | Интерфејс може имати само потпис функционалности, тако да је у основи празна љуска. |
Апстрактна класа може садржавати чланове. цонстс, дефинисане методе и одељци метода. | Интерфејс може да садржи само методе и цонстс. |
Дефинише основни идентитет класе и користи се за описивање објеката истог типа података. | Користи се за описивање периферних способности класе. |
Чланови апстрактне класе не могу бити статични осим ако нису потпуни чланови. | Чланови интерфејса не могу бити статични. |
Идеалан је за имплементацију исте врсте и уобичајено понашање. | Сучеља је боље користити ако неколико имплементација дијели само потписе метода. |
Може имати декларацију конструктора. | Не може имати декларацију конструктора. |
Апстрактна класа има унапред дефинисана поља и ограничења. | Поља се не могу дефинисати у интерфејсима. |
Може имати и апстрактне и не-апстрактне методе. | Може имати само апстрактне методе. |
Која је разлика између апстрактне класе и интерфејса? Ово је вероватно једно од најчешћих питања које се постављају у било ком техничком разговору. Вероватно ћете наћи мноштво информација о апстрактним класама и сучељима у било којем Ц # уџбенику, међутим, разумевање разлике између њих две је прилично тежак део. Можете објединити све информације које можете пронаћи и још увек их не можете добити довољно. Па, концептуално су оба најважнија термина у програмирању и сасвим су иста, међутим, знатно се разликују у погледу функционалности. Док је апстрактна класа посебна врста класе која дјелује као основа за остале класе, интерфејс је, с друге стране, само празна љуска са само чланским декларацијама.