Назад к вопросам
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);
}
}