Sobes.tech
Junior — Middle
104

Wat zijn de verschillen tussen een abstracte klasse en een interface in objectgeoriënteerd programmeren?

Bedrijven waar gevraagd werd
РунитиРунити

Antwoord van 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 — только объявление метода.