Junior
118
questionbank
В чем разница между абстрактным классом и интерфейсом?
Ответ от нейросети
sobes.tech AI
Абстрактный класс может содержать поля, конструкторы, реализованные и абстрактные методы. Интерфейс содержит только объявления членов (методы, свойства, индексаторы, события), которые должны быть реализованы классами, его наследующими.
| Описание | Абстрактный класс | Интерфейс |
|---|---|---|
| Члены | Могут быть реализованы, могут быть абстрактны, содержать поля. | Только объявления членов (без реализации до C# 8). |
| Наследование | Класс может наследоваться только от одного абстрактного класса. | Класс может реализовывать множество интерфейсов. |
| Модификаторы доступа | Могут использоваться различные модификаторы доступа (public, protected, internal). | Все члены интерфейса неявно public (до C# 8). |
| Конструкторы | Могут иметь конструкторы. | Не могут иметь конструкторов. |
| Состояние | Может хранить состояние через поля. | Не может хранить состояние. |
Пример абстрактного класса:
// Абстрактный класс Shape
public abstract class Shape
{
// Абстрактный метод, который должен быть реализован производными классами
public abstract double GetArea();
// Реализованный метод
public void DisplayInfo()
{
Console.WriteLine($"Площадь: {GetArea()}");
}
}
Пример интерфейса:
// Интерфейс IPrintable
public interface IPrintable
{
// Объявление метода, который должен быть реализован
void Print();
}