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
プロパティはどうですか?
既に述べたように、open
キーワードを使用すると、クラス宣言で使用するときにクラスをオーバーライドできます。したがって、プロパティをopen
として宣言すると、サブクラスがプロパティ自体をオーバーライドできます(getter/setterの再定義など)。 Kotlinではすべてがデフォルトで「final
」であるため、このキーワードは必須です。つまり、override
を使用することはできません(C#に似た経験があります)。
クラスはopen
であるため、abstract
として暗黙的に宣言されていることに注意してください。したがって、そのクラスのインスタンスを直接作成することはできません。
Javaの最終メソッド:オーバーライドできないメソッド。
Javaの最終クラス:拡張できないクラス。
Kotlinのオープンクラスとメソッドは、Javaのfinalと反対です。オープンメソッドはオーバーライド可能で、オープンクラスはKotlinで拡張可能です。