Java Kotlin中字段的'open'关键字是什么?

Java Kotlin中字段的'open'关键字是什么?,java,kotlin,Java,Kotlin,在Kotlin中,对于类和方法,open与Java中的notfinal相同 在下面的类中,open为标记为open的字段提供了什么 @MappedSuperclass abstract class BaseEntity() : Persistable<Long> { open var id: Long? = null } @MappedSuperclass 抽象类BaseEntity():可持久{ 打开变量id:Long?=null } 已更新 这不是重复的 我对属性的

在Kotlin中,对于类和方法,open与Java中的not
final
相同

在下面的类中,
open
为标记为
open
的字段提供了什么

@MappedSuperclass
abstract class BaseEntity() : Persistable<Long> {
     open var id: Long? = null
}
@MappedSuperclass
抽象类BaseEntity():可持久{
打开变量id:Long?=null
}
已更新 这不是重复的

我对属性的
open
关键字感兴趣

已更新

open
类可以继承。
open
fun可以被覆盖
val
属性是java中的
final
字段


那么
open
属性呢?

正如您所说,
open
关键字允许您在类声明中使用时重写类。因此,将属性声明为
open
,允许子类重写属性本身(例如,重新定义getter/setter)。该关键字是必需的,因为在Kotlin中,默认情况下所有内容都是“
final
”,这意味着您不能
覆盖它(类似于C#,如果您有经验的话)


请注意,您的类被隐式声明为
open
,因为它是
抽象的
,因此您不能直接创建该类的实例。

Java中的final方法:一种无法重写的方法

Java中的最终类:无法扩展的类


Kotlin中的开放类和方法相当于Java中final的反面,开放方法在Kotlin中是可重写的,开放类在Kotlin中是可扩展的。

@s1m0nw1它不是重复的。我对字段的
Open
关键字好奇只是一个观察-我对Kotlin一无所知,所以我放弃投票。但是,如果您可以提供一个演示其使用属性的示例(不要只在原始问题中添加“更新”,将整个问题更改为专门关于开放属性和非开放属性),则可能会重新打开此示例,因为另一个问题似乎没有解决此问题。只需确保在问题中保留“这不是重复”文本和链接。字段的open关键字允许稍后更改字段可见性/内容,并且仍然保持相同的名称:
open class Container{protected open val fieldA:String=“Some value”}class DerivedContainer:Container(){public override val fieldA:String=“Something other”}
这个问题怎么会重复open和public之间的区别呢?我觉得在这里提到“字段”这一点非常重要Kotlin有属性。这是一个用于VAL的getter方法,也是一个用于类中定义的VAR的getter和setter方法。即使它们有一个后台字段,我们也不必为此操心。既然已经提到了这一点,“open”属性的关键字应该更有意义,因为它只是说明生成的get/set方法不是最终的,而是开放的,可以覆盖。更新问题在java中,开放属性必须是非最终字段如果不使用java引用来定义
open
,可能会更容易混淆,尤其是因为您的答案参见ms忽略这个保留字的微妙之处。我不明白这个类是如何隐式声明为开放的,因为它是抽象的东西…@kevz
abstract
意味着你不能创建那个类的实例,但你必须先对它进行子类化。因此,将一个类标记为
abstract
意味着这个类也是
开放的
(否则您将无法将其子类化)。例如:
抽象类形状
不能直接实例化,但您可以创建和实例化子类(例如
三角形
矩形
,…)