Sobes.tech
Назад к вопросам
Middle+
6

Какая разница между интерфейсами и абстрактными классами в Java (начиная с Java 8)?

Компании, где спрашивали
луция

Ответ от нейросети

sobes.tech AI

Начиная с Java 8, интерфейсы и абстрактные классы имеют следующие ключевые отличия:

  • Наследование:

    • Абстрактный класс может наследовать только один класс (одиночное наследование).
    • Интерфейс может наследовать несколько интерфейсов (множественное наследование).
  • Реализация методов:

    • Абстрактный класс может содержать как абстрактные, так и конкретные методы с реализацией.
    • Интерфейс с Java 8 может содержать методы с реализацией по умолчанию (default методы) и статические методы.
  • Поля:

    • Абстрактный класс может иметь поля любого типа и модификаторов.
    • Интерфейс может содержать только константы (public static final).
  • Конструкторы:

    • Абстрактный класс может иметь конструкторы.
    • Интерфейс не может иметь конструкторов.
  • Использование:

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

Пример интерфейса с default методом:

public interface MyInterface {
    void abstractMethod();

    default void defaultMethod() {
        System.out.println("Default implementation");
    }
}

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

public abstract class MyAbstractClass {
    protected int value;

    public MyAbstractClass(int value) {
        this.value = value;
    }

    public abstract void abstractMethod();

    public void concreteMethod() {
        System.out.println("Value: " + value);
    }
}