web-dev-qa-db-ja.com

Kotlinのフィールドの「open」キーワードとは何ですか?

Kotlinでは、openは、クラスとメソッドのJavaにないfinalと同じです。

openとマークされたフィールドの次のクラスでopenは何を提供しますか?

@MappedSuperclass
abstract class BaseEntity() : Persistable<Long> {
     open var id: Long? = null
}

updatedこれは Kotlinの「open」と「public」の違いは何ですか?

プロパティのopenキーワードに興味がある

更新済み

openクラスを継承できます。
open funはオーバーライドできます
valプロパティはJavaのfinalフィールドです

openプロパティはどうですか?

27
M.T

既に述べたように、openキーワードを使用すると、クラス宣言で使用するときにクラスをオーバーライドできます。したがって、プロパティをopenとして宣言すると、サブクラスがプロパティ自体をオーバーライドできます(getter/setterの再定義など)。 Kotlinではすべてがデフォルトで「final」であるため、このキーワードは必須です。つまり、overrideを使用することはできません(C#に似た経験があります)。

クラスはopenであるため、abstractとして暗黙的に宣言されていることに注意してください。したがって、そのクラスのインスタンスを直接作成することはできません。

23
user2340612

Javaの最終メソッド:オーバーライドできないメソッド。

Javaの最終クラス:拡張できないクラス。

Kotlinのオープンクラスとメソッドは、Javaのfinalと反対です。オープンメソッドはオーバーライド可能で、オープンクラスはKotlinで拡張可能です。

12
Lajos Arpad