что такое "открытое" ключевое слово для полей в Котлине?

В 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.