Разлики между абстрактния клас и интерфейса в Java

Абстрактен клас срещу интерфейс в Java

За да разберете разликите между абстрактния клас и интерфейса в Java, е важно, на първо място, да разберете всеки от тях независимо. Абстрактният клас в Java се използва при деклариране на подкласове с набор от общи характеристики. Общата употреба на абстрактния клас е супер клас на други класове, което в действителност му позволява да разшири абстрактния клас. Абстрактна ключова дума се използва в декларацията на абстрактен клас. Както всеки друг клас, абстрактният клас има полета, които описват методи и характеристики, които класът може да изпълнява. Чрез самото деклариране на абстрактен клас класът не може да бъде иницииран

Java интерфейсът може да бъде приравнен към протокол. Той представлява предварително зададено и съгласувано поведение, което позволява да се улесни взаимодействието на несвързани обекти. В зависимост от потребителя, интерфейсът държи ключа към различните действия, които се изпълняват. Следователно интерфейсът служи като връзка между производителя и потребителя. Следователно интерфейсите в Java са група методи, съдържащи празни тела, които могат да имат постоянни декларации. При излагане на клас на Java интерфейса, това означава, че поведението, което се очаква от класа, е прилагането на всички методи на интерфейса.


Различията

Първо, абстрактен клас позволява полета, които не са статични или окончателни, за разлика от статичните и крайните полета, използвани в интерфейсите. Интерфейсите не могат да имат код за изпълнение, използван в тях, и може да има код за изпълнение, използван в абстрактен клас. Кодовете за изпълнение, внедрени в абстрактния клас, могат да имат няколко или всички реализирани методи. По подразбиране всички методи на интерфейса са „абстрактни“.

Видимостта е възможна и за методи или членове на абстрактен клас, които могат да варират като обществени, защитени, частни или никакви. От друга страна, видимостта на интерфейса може да бъде зададена само в един режим на видимост, който е „обществен“.

Абстрактен клас автоматично ще наследи обектния клас. Това на практика означава, че са включени методи като clone () и equals (). В интерфейс не е възможно наследяване на обектния клас. След това абстрактният клас има възможност да има конструктор, но интерфейс не може да има такъв.

Интерфейсът в Java също има много важна функция с прилагането на множество наследства, тъй като клас може да има само един супер клас. Въпреки че може да присъства само един супер клас, той може да бъде реализиран в произволен брой интерфейси. Не е възможно да има множество наследства в абстрактен клас.

По отношение на производителността интерфейсите са по-бавни в реализацията, за разлика от абстрактния клас главно поради допълнителната посока за намиране на съответния метод в клас. Разликата обаче стана по-бавна поради съвременните виртуални машини на Java, които непрекъснато се надграждат.

Добавянето на метод в интерфейс изисква да проследите всички класове за изпълнение, които реализират специфичния интерфейс. Освен това можете да разширите интерфейса, така че да му позволите да има допълнителни методи. Ако случайно имате работа с абстрактен клас, всичко, което е необходимо, е да добавите прилагането по подразбиране на метода и кодът да продължи да функционира. Доколкото съществуват разлики между абстрактни класове и интерфейси, важно е да се отбележи, че те не са съперници, но разликите, споменати тук, служат да се допълват взаимно.  

резюме

  1. Абстрактните класови полета не са статични или окончателни, за разлика от интерфейса, който има статични и финални таблици.

  2. Не може да се използва код за изпълнение в интерфейси, докато той може да бъде използван в абстрактен клас.

  3. Видимостта на интерфейса може да бъде обществена, докато абстрактната видимост на класа може да варира.

  4. Абстрактен клас автоматично наследява обектния клас, но това не е възможно в интерфейса.

  5. Абстрактният клас е по-бърз от интерфейса в изпълнението.