Интерфейс срещу абстрактния клас в Java: Каква е разликата?

Съдържание:

Anonim

Какво е интерфейс?

Интерфейсът е план, който може да се използва за реализиране на клас. Интерфейсът не съдържа конкретни методи (методи, които имат код). Всички методи на интерфейса са абстрактни методи.

Интерфейс не може да бъде създаден. Класовете, които реализират интерфейси, обаче могат да бъдат създадени. Интерфейсите никога не съдържат променливи на екземпляра, но те могат да съдържат публични статични окончателни променливи (т.е. променливи на постоянен клас)

Какво е абстрактният клас?

Клас, който има абстрактната ключова дума в декларацията си, се нарича абстрактен клас. Абстрактните класове трябва да имат поне един абстрактен метод. , т.е. методи без тяло. Може да има множество конкретни методи.

Абстрактните класове ви позволяват да създавате чертежи за конкретни класове. Но класът наследник трябва да реализира абстрактния метод.

Абстрактните класове не могат да бъдат създадени.

Важни причини за използване на интерфейси

  • Интерфейсите се използват за постигане на абстракция.
  • Проектиран да поддържа динамична резолюция на метода по време на изпълнение
  • Помага ви да постигнете хлабаво свързване.
  • Позволява ви да отделите дефиницията на метод от йерархията на наследяване

Важни причини за използване на абстрактния клас

  • Абстрактните класове предлагат функционалност по подразбиране за подкласовете.
  • Предоставя шаблон за бъдещи конкретни класове
  • Помага ви да дефинирате общ интерфейс за неговите подкласове
  • Абстрактният клас позволява повторна употреба на кода.

Интерфейс Vs. Абстрактен клас

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

Параметри Интерфейс Абстрактен клас
Скорост Бавен Бърз
Множество наследства Внедрете няколко интерфейса Само един абстрактен клас
Структура Абстрактни методи Абстрактни и конкретни методи
Кога да се използва Бъдещо подобрение За да се избегне независимостта
Наследяване / изпълнение Класът може да реализира множество интерфейси Класът може да наследи само един абстрактен клас
Изпълнение по подразбиране Докато добавяте нови неща към интерфейса, кошмар е да намерите всички внедряващи и да внедрите новодефинирани неща. В случай на абстрактния клас можете да се възползвате от изпълнението по подразбиране.
Модификатори на достъпа Интерфейсът няма модификатори за достъп. Всичко, дефинирано в интерфейса, се приема като публичен модификатор. Абстрактният клас може да има модификатор на достъп.
Кога да се използва По-добре е да използвате интерфейс, когато различни реализации споделят само подпис на метод. Полиморфна йерархия на типовете стойности. Трябва да се използва, когато различни изпълнения от един и същи вид споделят общо поведение.
Полета с данни интерфейсът не може да съдържа полета с данни. класът може да има полета с данни.
По подразбиране за множествено наследяване Един клас може да реализира множество интерфейси. Класът наследява само един абстрактен клас.
Изпълнение Интерфейсът е абстрактен, така че не може да предостави никакъв код. Абстрактният клас може да даде пълен код по подразбиране, който трябва да бъде заменен.
Използване на модификатори на Access Не можете да използвате модификатори на достъп за метода, свойствата и т.н. Можете да използвате абстрактен клас, който съдържа модификатори на достъпа.
Употреба Интерфейсите помагат да се определят периферните способности на клас. Абстрактен клас дефинира идентичността на клас.
Дефинирани полета Не могат да бъдат дефинирани полета Абстрактният клас ви позволява да дефинирате както полета, така и константи
Наследяване Интерфейсът може да наследява множество интерфейси, но не може да наследява клас. Абстрактният клас може да наследи клас и множество интерфейси.
Конструктор или деструктори Интерфейсът не може да декларира конструктори или деструктори. Абстрактен клас може да декларира конструктори и деструктори.
Ограничение на разширенията Той може да разшири произволен брой интерфейси. Той може да разширява само един клас или един абстрактен клас наведнъж.
Абстрактна ключова дума В абстрактен интерфейс ключова дума не е задължителна за деклариране на метод като абстракт. В абстрактния клас абстрактната ключова дума е задължителна за деклариране на метод като абстракт.
Тип клас Интерфейсът може да има само публични абстрактни методи. Абстрактният клас има защитени и публични абстрактни методи.

Примерен код за интерфейс и абстрактен клас в Java

Следва примерен код за създаване на интерфейс и абстрактен клас в Java

Синтаксис на интерфейса

interface name{//methods}

Пример за интерфейс на Java:

interface Pet {public void test();}class Dog implements Pet {public void test() {System.out.println("Interface Method Implemented");}public static void main(String args[]) {Pet p = new Dog();p.test();}}

Синтаксис на абстрактния клас

abstract class name{// code}

Пример за абстрактен клас:

abstract class Shape {int b = 20;abstract public void calculateArea();}public class Rectangle extends Shape {public static void main(String args[]) {Rectangle obj = new Rectangle();obj.b = 200;obj.calculateArea();}public void calculateArea() {System.out.println("Area is " + (obj.b * obj.b));}}