Kotlin:为什么*未解析的引用*用于密封 class 的 subclass 的构造函数参数

Kotlin : Why *unresolved reference* for a constructor parameter of a subclass of a sealed class

sealed class Person () {
    data class Man (val name: String): Person()
    data class Woman (val name: String): Person() 

    fun stringOf(): String {
    return when (this) {
        is Person.Man -> "Mr "+this.name
        is Person.Woman -> "Mrs "+this.name
    }
    } // works fine

    fun nameOf() : String {
        return this.name // error: unresolved reference: name
    }
}

fun main(args: Array<String>) {
    val man = Person.Man("John Smith")
    println (man.stringOf()) 
}

为什么上面的代码给出 error: unresolved reference: name for the function nameOf 而 works correctly for function stringOf 看起来非常相似。

因为在Personclass中没有定义name属性。您拥有的所有 name 都在子 class 中,因此父 class 中的 nameOf 函数无法访问它。