继承的对象创建新字段,而不是Override
。
我们说CredentialMessage
是Message
的扩展
open class Message(
@SerializedName("l") open val label: String
){
override fun toString(): String {
return label
}
}
class CredentialMessage(
@Transient override val label: String,
@SerializedName("u") open val userName: String,
@SerializedName("p") open val password: String
): Message("\uD83D\uDD12" + label) //🔒
CredentialMessage
的简单示例如下所示val message = CredentialMessage("Barev","user","pass")
当我打印消息标签而不是“🔒Barev”时,我得到了“Barev”
println(message.label) // "Barev"
调试显示有两个标签。
第一个是
label
,第二个是Message.label
而且没有任何方式可以访问
Message.label
最佳答案
反编译现有源代码后,我找到了答案。override
关键字生成完全相同的字段。删除override
关键字后,问题解决了。
class CredentialMessage(
label: String,
@SerializedName("u") open val userName: String,
@SerializedName("p") open val password: String
): Message("\uD83D\uDD12" + label) //🔒
关于kotlin - 如何避免Kotlin中的重复覆盖字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59974931/