My code -
fun main() {
    val student = Student()
    student.greet()
}
open class Person(open var name: String) {
    fun greet() {
        println("Hello $name")
    }
}
class Student(override var name: String = "John Doe"): Person(name) {
}
Here I have a parent class Person and a child class Student. parent class Person has property name and method greet(). child class Student is inheriting them.
Here I am able to directly modify name variable of Student class from main() function using student.name. I want to encapsulate name variable to prevent name from being directly modified from main() function so that the constructor Student() is the only way to set the value of name variable.
Usually private visibility modifier keyword is used to encapsulate variables in a class.
But apparently when the variables have open or override modifier, this technique does not work.
So, is it possible to encapsulate name variable?