Свойства интерфейса в Kotlin
Интерфейс может описывать не только методы, но и свойства. Свойство без инициализации в интерфейсе абстрактное: класс обязан дать ему значение - через поле, параметр конструктора или переопределение.
interface Named {
val name: String
}
class Person(override val name: String) : Named
Свойство только для чтения объявляют через val,
изменяемое - через var. В интерфейсе нельзя
хранить отдельное поле с инициализацией, как в обычном
классе, но можно задать геттер с телом.
interface Labeled {
val label: String
val caption: String
get() = "label: $label"
}
class Tag(override val label: String) : Labeled
Если в интерфейсе указан var, класс должен
предоставить и чтение, и запись - обычно через
свое поле или явные get и set.
interface Counter {
var value: Int
}
class MutableCounter : Counter {
override var value: Int = 0
}
Сделайте интерфейс Identifiable. Пусть
в интерфейсе будет свойство id типа
Int только для чтения.
Сделайте класс Product, который будет
реализовывать интерфейс Identifiable.
Значение свойства id передавайте
параметром конструктора.