Интерфейс против абстрактного класса в Java: в чем разница?

Содержание:

Anonim

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

Интерфейс - это план, который можно использовать для реализации класса. Интерфейс не содержит конкретных методов (методов, имеющих код). Все методы интерфейса - абстрактные.

Невозможно создать экземпляр интерфейса. Однако можно создавать экземпляры классов, реализующих интерфейсы. Интерфейсы никогда не содержат переменных экземпляра, но могут содержать общедоступные статические конечные переменные (т. Е. Постоянные переменные класса)

Что такое абстрактный класс?

Класс, в объявлении которого есть ключевое слово abstract, называется абстрактным классом. В абстрактных классах должен быть хотя бы один абстрактный метод. , т.е. методы без тела. У него может быть несколько конкретных методов.

Абстрактные классы позволяют создавать схемы для конкретных классов. Но наследующий класс должен реализовывать абстрактный метод.

Невозможно создать абстрактные классы.

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

  • Интерфейсы используются для достижения абстракции.
  • Разработан для поддержки разрешения динамических методов во время выполнения
  • Это поможет вам добиться слабой связи.
  • Позволяет отделить определение метода от иерархии наследования

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

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

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

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

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

Пример кода для интерфейса и абстрактного класса в 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));}}