Back to questions
Junior — Middle
132
Какие отличия существуют между абстрактным классом и интерфейсом в объектно-ориентированном программировании?
Companies where asked
Grotem
Answer from AI
sobes.tech AI
Абстрактный класс и интерфейс — два способа описания контрактов и поведения в объектно-ориентированном программировании, но с разными особенностями:
- Абстрактный класс может содержать как абстрактные методы (без реализации), так и методы с реализацией, а также поля (состояние). Он служит базовым классом, от которого можно наследоваться.
- Интерфейс описывает только сигнатуры методов (контракт), не содержит состояния и обычно не содержит реализации (хотя в некоторых языках возможны default-методы).
Отличия:
- Класс может наследоваться только от одного абстрактного класса, но реализовывать несколько интерфейсов.
- Абстрактный класс может иметь конструкторы, интерфейс — нет.
- Абстрактный класс используется, когда нужно частично реализовать функциональность, интерфейс — когда нужно задать только контракт.
Пример на Dart (Flutter):
abstract class Animal {
void eat(); // абстрактный метод
void sleep() {
print('Sleeping'); // метод с реализацией
}
}
// Интерфейс в Dart — это класс с только абстрактными методами
abstract class Flyable {
void fly();
}
class Bird extends Animal implements Flyable {
@override
void eat() {
print('Bird is eating');
}
@override
void fly() {
print('Bird is flying');
}
}