Back to questions
Росатом
Junior — Middle
88
Чем отличается использование абстрактных классов от интерфейсов в объектно-ориентированном программировании?
Companies where asked
Answer from AI
sobes.tech AI
Абстрактные классы и интерфейсы — это два способа описания контрактов и поведения в объектно-ориентированном программировании, но они имеют ключевые отличия:
-
Абстрактный класс может содержать как реализованные методы, так и абстрактные (без реализации). Он служит базовым классом, от которого можно наследоваться. Абстрактный класс может иметь состояние (поля).
-
Интерфейс описывает только набор методов (в современных языках интерфейсы могут содержать дефолтные реализации, но по сути это контракт). Интерфейс не содержит состояния.
Основные отличия:
- Наследование: Класс может наследоваться только от одного абстрактного класса, но может реализовывать множество интерфейсов.
- Состояние: Абстрактный класс может хранить состояние, интерфейс — нет.
- Назначение: Абстрактный класс используется, когда есть общая реализация и состояние, а интерфейс — для определения контракта без реализации.
Пример на Java:
abstract class Animal {
abstract void makeSound();
void breathe() {
System.out.println("Breathing...");
}
}
interface Flyable {
void fly();
}
class Bird extends Animal implements Flyable {
void makeSound() {
System.out.println("Chirp");
}
public void fly() {
System.out.println("Flying");
}
}
Здесь Animal — абстрактный класс с частичной реализацией, а Flyable — интерфейс, определяющий способность летать.