Абстрактен клас срещу интерфейс
Абстрактен клас (или тип) е тип в система с номинативен тип, декларирана от програмата. Въпреки че името предполага такова, абстрактен клас може или не може да включва абстрактни методи или свойства. Класът на разграничение се отнася до различни езикови конструкции, които могат да бъдат използвани за прилагане на абстрактни типове. Абстрактните часове могат да се характеризират с проблем, свързан с дизайн, който е в съответствие с най-доброто обектно ориентирано програмиране и с незавършената им природа.
Интерфейсът е абстрактен тип, който класовете трябва да внедрят, за да посочат интерфейс (общо казано). Интерфейсите могат да съдържат само подписи на методи и константни декларации (както статични, така и крайни), никога дефиниции на метода. Интерфейсите симулират множество наследявания и се използват за кодиране на прилики, споделени между различни видове класове.
Абстрактните типове могат да бъдат създадени, обозначени или симулирани по няколко различни начина. Програмист може да обозначава абстрактни типове, като използва ключовата дума абстрактно изрично, като включва един или повече методи в дефиницията на класа, наследява от друг абстрактен тип, без да отменя липсващи функции, необходими за завършване на дефиницията на клас, или чрез изпращане на определен метод към ориентирания към обекта програмен език, известен като този, който не прилага директно метода.
Интерфейсите могат да бъдат определени с помощта на абстрактни методи. Класовете също могат да бъдат реализирани в интерфейси. Ако един клас реализира интерфейс и не прилага всички свои методи, трябва да се използва резюмето на означаващия, в противен случай този означаващ не е необходим (защото всички интерфейси са присъщи абстрактни). Класовете също могат да реализират множество интерфейси.
Докато интерфейсите се използват за определяне на общи интерфейси, абстрактни типове могат да бъдат използвани за дефиниране и налагане на протокол (което е набор от операции, които всички обекти, които реализират желания протокол, трябва да поддържат). Абстрактните типове не се срещат в езиците без подтипиране. Тъй като такива подтипове са принудени да внедрят цялата необходима функционалност, осигурявайки коректността на изпълнението на програмата. Има няколко начина, по които могат да бъдат създадени абстрактни типове: пълните абстрактни базови класове са класове, които или са изрично обявени за абстрактни, или съдържат абстрактни (непроменени) методи; Общите системи за Lisp Object включват миксини, които са базирани на системата за аромати; Java, разбира се; и черти, която действа като продължение на Smalltalk.
Резюме:
1. Абстрактни класове (или видове) декларират програми; интерфейсите са абстрактни типове, които всички класове трябва да внедрят, за да посочат интерфейса си.
2. Абстрактните типове могат да се означават, като се използва изрично ключовата дума; интерфейсите са по своята същност абстрактни, поради което изобщо не е необходимо да се означават с помощта на ключовата дума (освен ако определен клас реализира интерфейс, но не прилага всичките му методи).