Назад к вопросам
Senior
6
Зачем нужен интерфейс и абстрактный класс, в чём отличия?
Компании, где спрашивали
Сбербанк
Ответ от нейросети
sobes.tech AI
Интерфейс и абстрактный класс служат для определения контрактов и базового поведения, но имеют разные цели и возможности:
-
Интерфейс описывает только набор методов и свойств без реализации (в C# 8+ возможна реализация по умолчанию). Он задаёт контракт, который должны реализовать классы. Класс может реализовывать несколько интерфейсов.
-
Абстрактный класс может содержать как абстрактные методы (без реализации), так и методы с реализацией, а также поля. Он служит базовым классом для наследования. Класс может наследоваться только от одного абстрактного класса.
Отличия:
- Множественное наследование: интерфейсы можно реализовывать множественно, абстрактный класс — только один.
- Возможность содержать состояние: абстрактный класс может иметь поля, интерфейс — нет (кроме статических членов).
- Использование: интерфейс для определения поведения, абстрактный класс — для общего базового функционала.
Пример:
interface ILogger
{
void Log(string message);
}
abstract class BaseLogger : ILogger
{
public abstract void Log(string message);
public void LogWithTimestamp(string message)
{
Console.WriteLine($"[{DateTime.Now}] {message}");
}
}
class ConsoleLogger : BaseLogger
{
public override void Log(string message)
{
Console.WriteLine(message);
}
}