Ответ
Основное концептуальное различие в том, что абстрактный класс определяет что объект есть (is-a relationship), а интерфейс определяет что объект может делать (capability).
Абстрактный класс:
- Может содержать как абстрактные методы (без реализации), так и конкретные методы с реализацией.
- Может иметь поля (свойства) с различными модификаторами доступа (public, protected, private).
- Может содержать конструктор.
- Класс может наследовать только от одного абстрактного класса.
- Используется, когда родственные классы имеют общее состояние и поведение.
Интерфейс:
- До Java 8 / C# 8.0 содержал только сигнатуры методов (контракт). Современные версии позволяют добавлять реализации по умолчанию (
defaultв Java,virtualв C#) и статические методы. - Не может содержать поля состояния (только константы).
- Не может иметь конструктор.
- Класс может реализовывать множество интерфейсов.
- Используется для определения контракта, который могут выполнять несвязанные классы.
Пример на C#:
// Абстрактный класс: общая базовая логика
abstract class DataExporter
{
protected string _data;
public DataExporter(string data) { _data = data; } // Конструктор
public virtual void PrepareData() { /* общая реализация */ } // Конкретный метод
public abstract void Export(); // Абстрактный метод
}
// Интерфейс: контракт на возможность логирования
interface ILoggable
{
void Log(string message); // Только сигнатура
}
// Класс использует и наследование, и реализацию интерфейса
class CsvExporter : DataExporter, ILoggable
{
public CsvExporter(string data) : base(data) { }
public override void Export() { /* экспорт в CSV */ }
public void Log(string message) { /* логирование */ }
} Видео-ответы
▶
Публичное собеседование: QA Automation Lead
▶
Собеседование Frontend Angular 415 gross + 20% премии
▶
Java разработчик проходит собеседование в бигтех на Middle позицию
▶
Middle Java разработчик удивил на собеседовании знаниями уровня Senior!
▶
РЕАЛЬНОЕ СОБЕСЕДОВАНИЕ НА BACKEND РАЗРАБОТЧИКА ПОЛУЧИЛ ЗП 280К ЗАВАЛИВ ПОЛОВИНУ ТЕХНИЧЕСКИХ ВОПРОСОВ
▶
Собеседование Middle PHP разработчика
▶
Собеседование Laravel PHP backend разработчика junior. Тренировка к собеседованию
▶
Собеседование PHP, Тильда паблишинг
▶
Собеседование PHP, весна 2024, АО Тривио
▶
СОБЕСЕДОВАНИЕ по PHP: к каким ВОПРОСАМ готовиться?
▶
Реальное собеседование на Junior PHP разработчика
▶
Успешное собеседование Middle Java в холдинг T1
▶
обеседование в Oracle на Middle Java
▶
Парень стал программистом в 33 года, а в 36 уже крепкий миддл?? / Техсобес Middle Python Developer
▶
Легчайшее JAVA собеседование в моей жизни
▶
Как проходит Java-интервью в 2025 | Живое собеседование, ошибки и советы
▶
Собеседование ученика на Frontend-разработчика в Риглу - Часть 2
▶
Собес на стажика с таймтрекером, пишущего на dotnet ಠ_ಠ #net #csharp
▶
Проверяем знания перед реальными собеседованиями | Техническое собеседование Java Kotlin | Jetbulb
▶
Unity Developer Собеседование C#. Тренировочное интервью на вакансию с актуальными вопросами
▶
Собеседование на позицию Unity Developer. C#. Тренировочный собес. Актуальные вопросы
▶
ПРОБНОЕ СОБЕСЕДОВАНИЕ C# Junior программиста
▶
Собеседование на .NET разработчика (backend)
▶
Гриша Скобелев, Артур Власов: Публичное собеседование Junior Software Engineer