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

Чем отличается абстрактный класс от интерфейса?

Компании, где спрашивали
Gear Games

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

sobes.tech AI

Абстрактный класс — это класс, который может содержать как реализованные методы, так и абстрактные (без реализации). Он служит базой для наследования и может содержать состояние (поля).

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

Основные отличия:

  • Абстрактный класс может содержать реализацию и состояние, интерфейс — только сигнатуры методов (в некоторых языках интерфейсы могут содержать дефолтные методы).
  • Класс может наследоваться только от одного абстрактного класса, но реализовывать несколько интерфейсов.
  • Абстрактный класс задаёт частичную реализацию, интерфейс — только контракт.

Пример на Java:

abstract class Animal {
    void eat() { System.out.println("Eating"); }
    abstract void sound();
}

interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    void sound() { System.out.println("Chirp"); }
    public void fly() { System.out.println("Flying"); }
}