Назад к вопросам
Senior
8
Чем абстрактный класс отличается от интерфейса?
Компании, где спрашивали
ИП Ганус Александр Андреевич
Ответ от нейросети
sobes.tech AI
Абстрактный класс и интерфейс — это два способа описания контрактов и поведения в Java, но они имеют ключевые отличия:
-
Абстрактный класс может содержать как абстрактные методы (без реализации), так и методы с реализацией, а также поля с состоянием. Он используется, когда нужно задать базовую реализацию и общее состояние для подклассов.
-
Интерфейс изначально содержал только объявления методов без реализации (до Java 8), но начиная с Java 8, интерфейсы могут содержать методы с реализацией по умолчанию (default методы) и статические методы. Интерфейс не может содержать состояние (полей с данными), кроме констант (static final).
Другие отличия:
- Класс может наследоваться только от одного абстрактного класса, но реализовывать множество интерфейсов.
- Абстрактный класс может иметь конструкторы, интерфейс — нет.
Пример:
abstract class Animal {
abstract void makeSound();
void breathe() {
System.out.println("Breathing...");
}
}
interface Flyable {
void fly();
}
class Bird extends Animal implements Flyable {
void makeSound() {
System.out.println("Chirp");
}
public void fly() {
System.out.println("Flying");
}
}