Интерфейсы не могут хранить состояние — они не поддерживают backing fields для свойств. Абстрактные классы могут хранить состояние, объявляя свойства с настоящими backing fields, что позволяет сохранять реальные данные внутри класса.
Интерфейсы не могут иметь конструкторы. Абстрактные классы могут определять конструкторы, которые вызываются при создании экземпляра конкретного подкласса.
И интерфейсы, и абстрактные классы поддерживают абстрактные методы, которые должны быть переопределены подклассами. Однако:
Это одно из самых критических различий:
interface Flyable { fun fly() }
interface Swimmable { fun swim() }
// Несколько интерфейсов разрешены
class Duck : Flyable, Swimmable { ... }
// Только один абстрактный класс разрешён
abstract class Animal { var name: String = "" }
class Dog : Animal() { ... }
Интерфейсы в Kotlin могут объявлять свойства с backing fields, позволяя им сохранять состояние так же, как это делают абстрактные классы.
Новый — ещё не проверен сообществом
Вы