Какие отличия существуют между абстрактным классом и интерфейсом в объектно-ориентированном программировании?
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 — только объявление метода.