Olá! Estava experimentando com a linguagem e me deparei com um problema quando se usa uma atributo protected... O kotlin reclama quando crio getters ou setters com os nomes setName() getName() ou qualquer outro nome convencional, pois entra em conflito com algo da JVM...
Teoricamente, em C# por exemplo, vc apenas deixa protected o atributo, quano se vai utilizar herança, e cria os getters e setters normalmente, mas em Kotlin para que isso possa ser feito, aparentemente tenho q colocar uma anotação " @JvmName("getName1")".
Poderiam esclarecer pq isso acontece?
Eu resolvi de 2 formas:
Deixei como privado o atributo, e na classe filha dessa super classe, busquei os atributos com super.getName().
open class Account(name: String, amount: Double) {
private var name: String = name
val accountNumber: Int =
Random.nextInt(0, 1000)
var balance: Double = amount
fun getName(): String {
return name
}
class AccountVIP(name: String, amount: Double) : Account(name, amount) {
val premiumNum: Int = Random.nextInt(1, 1000)
override fun statementPrint() {
println("${super.getName()}'s account Statement")
println("-----------------------------------")
println(
"Nome: ${super.getName()}\n" +
"Acc Number: ${accountNumber}\n" +
"Amount: ${balance}\n" +
"VIP Number: ${premiumNum}\n"
)
}
Usei o private set abaixo do atributo na classe mãe, o que protege, mas ainda permite que a main veja o atributo.
open class Account(name: String, amount: Double) {
var name: String = name
private set
val accountNumber: Int =
Random.nextInt(0, 1000)
var balance: Double = amount
}
Qual é a resolução usada nesse tipo de problema?