Абстрактен клас и интерфейс се използват главно за абстракция, но са много различни един от друг. И двете са основна част на Java, но имат свои собствени приложения. Въпреки че и двата термина могат да бъдат синоними помежду си, те не могат да се използват взаимозаменяемо.
Между тях има значителни разлики. Докато методът на интерфейса е абстрактен по подразбиране, той може да съдържа както абстрактни, така и нео-абстрактни методи. Е, тъй като Java 8, интерфейсите също имат реализации на методи и те могат да имат както статични, така и методи по подразбиране в Java. Нека проучим подробно разликата между двете.
Абстрактен клас в Java е клас, който се декларира абстрактно - може или не може да съдържа абстрактни методи. Той е доста подобен на Java интерфейс, с изключение на факта, че може да съдържа прилагането на метод по подразбиране. Подобно на обектно-ориентираното програмиране, абстракцията в Java се постига с помощта на абстрактни класове и интерфейси. В Java абстракцията означава скриване на неподходящите детайли от потребителя, за да се съсредоточи само върху съществените детайли, за да се увеличи ефективността, като по този начин се намали сложността. Ключовата дума „абстрактен“ се използва за създаване на абстрактен клас, точно преди ключовата дума клас в декларацията за клас.
Абстрактен клас може или не може да съдържа методи за абстракция (методи без тела), но ако клас има поне един метод за абстракция, той трябва да бъде обявен за абстракт. Неабстракционните методи обаче могат да се използват и само в абстрактен клас, но само за прилагане на поведение по подразбиране. Методите в абстрактен клас могат да имат модификатори на достъп като частни, обществени, статични и защитени, в зависимост от нивото на видимост. Абстрактният клас не може да бъде инстанциран и не осигурява 100-процентова абстракция поради факта, че може да има конкретен метод.
Интерфейс, макар да изглежда като клас, не е. Тъй като Java не поддържа множество наследявания, понякога интерфейс е идеален за осигуряване на база за йерархия на класа. Интерфейсът е по-скоро план за клас, който също се използва за постигане на абстракция в Java. Той съдържа абстрактни методи и статични константи. Казано по-просто, интерфейс е съвкупност от абстрактни методи, които се използват за уточняване на поведение, което класът трябва да приложи. За разлика от абстрактния клас, интерфейсът осигурява пълна абстракция в Java. Той може да има както методи, така и променливи като клас, но декларираните в интерфейса методи са абстрактни по подразбиране.
Абстрактен клас | интерфейс |
Абстрактната ключова дума се използва за създаване на абстрактен клас и може да се използва с методи. | Интерфейсната ключова дума се използва за създаване на интерфейс, но не може да се използва с методи. |
Един клас може да разширява само един абстрактен клас. | Един клас може да реализира повече от един интерфейс. |
Абстрактният клас може да има както абстрактни, така и нео-абстрактни методи. | Интерфейсът може да има само абстрактни методи. |
Променливите по подразбиране не са окончателни. Може да съдържа променливи, които не са крайни. | Променливите са крайни по подразбиране в интерфейс. |
Абстрактен клас може да осигури реализацията на интерфейс. | Интерфейсът не може да осигури реализацията на абстрактен клас. |
Може да има методи с реализации. | Той осигурява абсолютна абстракция и не може да има реализации на методи. |
Той може да има публични, частни, статични и защитени модификатори за достъп. | Методите са имплицитно обществени и абстрактни в Java интерфейса. |
Не поддържа множество наследства. | Той поддържа множество наследства. |
Той е идеален за повторна употреба на код и перспектива за еволюция. | Той е идеален за деклариране на тип. |
Както абстрактен клас, така и интерфейс се използват за абстракция; те обаче имат справедлив дял от разликите. Основната разлика между двете се определя от методите на абстракция. Докато първите могат или не могат да имат абстрактни методи, вторите са имплицитно абстрактни. Абстрактният клас може да има както абстрактни, така и нео-абстрактни методи. Интерфейсът, от друга страна, може да има само абстрактни методи, следователно те не могат да имат реализация, което просто означава, че интерфейсът не може да има нео-абстрактни методи. Абстрактният клас не може да бъде създаден, което забранява създаването на обект. Интерфейсът, от друга страна, може да изглежда като клас, но не е така.