una interfaz crear como interface kotlin subclass superclass

interface - crear - Overriding val definido en la interfaz mediante el uso de var con el mismo nombre definido en la superclase



como crear una interfaz en sap (2)

Kotlin no permite que las propiedades val anulen las propiedades var .

Lo más cercano que funcionará:

open class Base(protected open var id: Int) {} interface ProviderI { val id: Int } class Instance(id: Int): Base(id), ProviderI { override var id: Int = 0 get() { return super.id } }

Hay una clase Base ( var necesita permanecer protegido):

open class Base(protected var id: Int) {}

Hay una interfaz que necesita usar val :

interface ProviderI { val id: Int }

También hay una clase que hereda de Base e implementa la interfaz ProviderI . Dentro de lo cual estoy tratando de implementar el val de la interfaz usando la superclase var (que tiene el mismo nombre). Como ejemplo que no funciona, intento hacer algo como eso (el ejemplo no funciona):

class Instance(id: Int): Base(id), ProviderI { override val id get() { return super.id } }

La idea es simple, pero lo he intentado todo y cada vez que se informa un error diferente.


Para anular un miembro que está presente en varios supertipos, Kotlin requiere que esté open en todos los supertipos , y esta restricción parece bastante natural, ya que de lo contrario los miembros final podrían anularse fácilmente de esta manera.

La solución es hacer que la id abra también en Base y anularla como una propiedad var :

open class Base(protected open var id: Int) interface ProviderI { val id: Int } class Instance(id: Int): Base(id), ProviderI { override var id: Int get() = super.id set(value) { super.id = value } }