Учебники

35) Интерфейс против абстрактного класса

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

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

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

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

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

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

Абстрактные классы не могут быть созданы.

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

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

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

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

Интерфейс 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));
    }
}