dattq2303
09/09/2021, 11:10 AMabstract class AuthorizeSalesAdditionalSecurity {
@SerializedName("lang")
// Using like below is fine too
// abstract val lang: String
open val lang: String? = null
@SerializedName("POSTransactionID")
// abstract val POSTransactionID: String
open val POSTransactionID: String? = null
}
data class CreditAuthorizeSalesAdditionalSecurity(
@SerializedName("lang") override val lang: String,
@SerializedName("POSTransactionID") override val POSTransactionID: String
) : AuthorizeSalesAdditionalSecurity() {}
data class UnionPayAuthorizeSalesAdditionalSecurity(
@SerializedName("lang") override val lang: String? = null,
@SerializedName("POSTransactionID") override val POSTransactionID: String? = null
) : AuthorizeSalesAdditionalSecurity() {}
I realize that I can use keyword "open" or "abstract" in AuthorizeSalesAdditionalSecurity and Kotlin accept both. Can someone explain for me the difference between 2 use case?marstran
09/09/2021, 11:14 AMval a = AuthorizeSalesAdditionalSecurity(lang, POSTransactionID)
. If it's abstract, you cannot do that.dattq2303
09/09/2021, 11:17 AMStephan Schroeder
09/09/2021, 11:19 AMdattq2303
09/09/2021, 11:21 AMStephan Schroeder
09/09/2021, 11:26 AMvar
instead of val
) so it make sense that you can overwrite setters and getters in subclasses.fun main() {
val listOfA: List<A> = listOf(A(), B())
listOfA.forEach {
println(it.s)
}
}
open class A {
open val s = "from class A"
}
class B: A() {
override val s get() = "from class B"
}
will output
from class A
from class B
https://pl.kotl.in/KSlTMGxchdattq2303
09/09/2021, 11:34 AM