Абстрактният клас прилича много на интерфейс, но концепцията е малко объркваща за начинаещите на OOP. В концептуален план абстрактният клас изглежда точно като интерфейс, разбира се, без никакво внедряване, но те имат своя справедлив дял от различията. Докато абстрактният клас може да бъде частично или изцяло реализиран, интерфейсът трябва да бъде реализиран изцяло. Е, най-забележимата разлика между двете е, че един абстрактен клас може да има изпълнение по подразбиране, докато интерфейс е само дефинирането на методите, които съдържат само декларациите на членовете. Нека обсъдим подробно теоретичните аспекти и на двете.
Абстрактният клас е специален тип клас, който действа като основа на други класове и не може да бъде създаден. Логиката на изпълнение на абстрактен клас се осигурява от неговите производни класове. За да се направи абстрактен клас, се използва "абстрактният" модификатор, което означава, че някои липсващи имплементи трябва да бъдат реализирани в класа, получен от него. Съдържа както абстрактни, така и не абстрактни членове. Абстрактният клас има за цел да осигури основна функционалност, която може да бъде споделена и надменяна от множество производни класове. Полезно е да се избегне всякакъв вид дублиране на код. Те приличат много на интерфейси, но с добавена функционалност.
Интерфейсът, от друга страна, не е клас, който съдържа само подписа на функционалността. Това е модел без прилагане. Концептуално казано, това е само определението на методите, което съдържа само декларацията на членовете. Това е празна обвивка, която не съдържа изпълнението на своите членове. Това е като абстрактен базов клас, който съдържа само абстрактни членове като методи, събития, индекси, свойства и т.н. Той не може да бъде създаден директно и неговите членове могат да бъдат реализирани от всеки клас. Освен това от клас могат да бъдат реализирани множество интерфейси, но клас може да наследи само един клас.
Абстрактен клас | интерфейс |
Абстрактен клас може да има всички модификатори на достъп за деклариране на членове за функции, подразделения и свойства. | Не е позволено даден интерфейс да има модификатори на достъп за деклариране на функции, подс., Свойства и т.н. Всички членове се приемат като неявно обществени. |
Един клас може да използва най-много само един абстрактен клас. | Класът може да наследи произволен брой интерфейси. |
Множественото наследяване не се поддържа в абстрактен клас. | Интерфейсът може да поддържа множество наследявания. |
Технически това е клас, който може или не може да съдържа както дефиниция, така и нейната реализация. | Интерфейсът може да има само подпис на функционалност, така че всъщност това е празен корпус. |
Абстрактният клас може да съдържа членове. consts, дефинирани методи и мъничета на методите. | Интерфейсът може да съдържа само методи и consts. |
Той дефинира основната идентичност на клас и се използва за описание на обекти от същия тип данни. | Използва се за описание на периферните способности на даден клас. |
Членовете на абстрактен клас не могат да бъдат статични, освен ако не са пълни членове. | Членовете на даден интерфейс не могат да бъдат статични. |
Той е идеален за реализации от същия вид и общо поведение. | По-добре е да използвате интерфейси, ако няколко реализации споделят само подписи на метод. |
Може да има конструкторска декларация. | Не може да има конструкторска декларация. |
Абстрактният клас има предварително дефинирани полета и ограничения. | Полетата не могат да бъдат дефинирани в интерфейсите. |
Той може да има както абстрактни, така и нео-абстрактни методи. | Може да има само абстрактни методи. |
Каква е разликата между абстрактен клас и интерфейс? Това вероятно е един от най-често срещаните въпроси, зададени във всяко техническо интервю. Вероятно ще намерите множество информация за абстрактни класове и интерфейси във всеки C # урок, обаче, разбирането на разликата между двете е доста трудната част. Можете да консолидирате цялата информация, която можете да намерите и все още не можете да получите достатъчно. Е, концептуално и двете са най-важните термини в програмирането и са доста еднакви, обаче се различават много по отношение на функционалността. Докато абстрактният клас е специален тип клас, който действа като база за други класове, интерфейсът, от друга страна, е просто празна обвивка само с декларации на членове.