Объявление того же свойства в классе Child, что и в Parent

Недавно я смотрел недавно Котлина и имел опыт работы на Java. В Java мы можем объявить поле с тем же именем, что и в родительском. Когда я делаю то же самое в Kotlin он дает name hides member of Super type User ошибки, которое name hides member of Super type User . Что мне здесь не хватает?

Котлин

 open class User(protected var name: String) class TwitterUser(var name: String) : User(name) 

Такая же концепция для Java

 public class A { protected String name; } public class B extends A { String name; } 

Проблема в том, что вы скрываете реализацию исходного свойства. Но есть одна возможность сделать это так или иначе:

 open class User(protected open var name: String) class TwitterUser(override var name: String) : User(name) 

Вы просто должны учитывать, что это главным образом изменяет реализацию свойства. Вы не сможете получить доступ к User.name или TwitterUser.name отдельно. Это точно так же.

Измените это, как,

 open class ClassParent(name: String) { } 

 class ClassChild(name: String) : ClassParent(name) { } 

вы можете использовать блок init, проверить детали

Если ваш суперкласс уже имеет свойство name , любой подкласс также будет иметь его автоматически. Почему бы вам потом определить этого ребенка? Лучше просто определить его как параметр конструктора, не делая его другим свойством:

 open class User(protected var name: String) //name is not a val/val! simply passed to the constructor as an argument class TwitterUser(name: String) : User(name) 

В противном случае, если вам действительно необходимо переопределить это свойство, сделайте его открытым в родительском и переопределите в дочернем элементе:

 open class User(protected open var name: String) class TwitterUser(override var name: String) : User(name)