Ответ
Interface определяет только структуру (методы и свойства) без реализации, а классы могут реализовывать несколько интерфейсов.
Абстрактный класс может содержать как абстрактные методы (без реализации), так и конкретные. От него можно наследоваться, но только один класс.
// Interface
interface Animal {
name: string;
makeSound(): void;
}
// Abstract class
abstract class Bird {
abstract fly(): void;
eat() { console.log("Eating..."); }
}
class Parrot extends Bird implements Animal {
name = "Parrot";
makeSound() { console.log("Squawk!"); }
fly() { console.log("Flying..."); }
}
Ключевые отличия:
- Интерфейсы — только контракты, абстрактные классы — частичная реализация.
- Интерфейсы поддерживают множественное наследование, абстрактные классы — нет.
- Абстрактные классы могут иметь модификаторы доступа (
protected,private), интерфейсы — толькоpublic.