что такое "открытое" ключевое слово для полей в Котлине?
В Kotlin open
такой же, как не final
в Java для классов и методов.
Что open
дают мне в следующем классе для поля, помеченного как open
?
@MappedSuperclass
abstract class BaseEntity() : Persistable<Long> {
open var id: Long? = null
}
обновлено, это не дублирует. Какая разница между "открытыми" и "публичными" в Котлине?
Меня интересует open
ключевое слово для свойств
обновленный
open
класс может быть унаследован.
open
развлечение можно переопределить
свойство val
- это final
поле в java
как насчет open
собственности?
Ответы
Ответ 1
Как вы сказали, ключевое слово open
позволяет вам переопределять классы при использовании в объявлении класса. Соответственно, объявляя свойство open
, он позволяет подклассам переопределять само свойство (например, переопределить getter/setter). Это ключевое слово требуется, поскольку в Kotlin по умолчанию все " final
", что означает, что вы не можете его override
(что-то похожее на С#, если у вас есть опыт с этим).
Обратите внимание, что ваш класс неявно объявляется open
поскольку он является abstract
, поэтому вы не можете создать экземпляр этого класса напрямую.
Ответ 2
последний метод в Java: метод, который нельзя переопределить.
последний класс в Java: класс, который не может быть расширен.
Открытые классы и методы в Kotlin эквивалентны противоположности final в Java, открытый метод является перезаписываемым, а открытый класс расширяемым в Kotlin.