Sobes.tech
Back to questions
Junior — Middle
59

Какие отличия существуют между абстрактным классом и интерфейсом в объектно-ориентированном программировании?

Companies where asked
РунитиРунити

Answer from AI

sobes.tech AI

Основные отличия между абстрактным классом и интерфейсом в объектно-ориентированном программировании:

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

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

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

  • Интерфейс не содержит состояния, абстрактный класс может содержать поля и конструкторы.

Пример в Python с использованием модуля abc:

from abc import ABC, abstractmethod

class AbstractClass(ABC):
    def concrete_method(self):
        print("Реализация в абстрактном классе")

    @abstractmethod
    def abstract_method(self):
        pass

class Interface(ABC):
    @abstractmethod
    def interface_method(self):
        pass

class ConcreteClass(AbstractClass, Interface):
    def abstract_method(self):
        print("Реализация абстрактного метода")

    def interface_method(self):
        print("Реализация интерфейсного метода")

Здесь AbstractClass содержит и реализованный метод, и абстрактный, а Interface — только объявление метода.