【问题标题】:Accessing members in a superclass from a base class从基类访问超类中的成员
【发布时间】:2022-11-30 18:23:02
【问题描述】:

这是 Kotlin 中的继承示例:

abstract class Animal(val size: Int)
class Dog(val cuteness: Int): Animal(345)

var dog: Dog = Dog(10)
var animal: Animal = dog

var x = 0
...

如果在最后一行放置断点,变量animal 将被设置为dog 的实例。但是,您只能访问 Animal 中的 size 成员。您无法访问 Dog 中的 cuteness 成员。但是 Android Studio 的调试器仍然可以让您在 animal 变量中看到 cuteness 成员的值。

有没有办法在代码中访问那些隐藏的成员?我不认为有。我认为 Android Studio 知道它们是什么并出于调试目的向您展示它们,但由于无法通过 Kotlin 访问它们,因此它会阻止您在代码中实际访问它们。也许我错了?

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    你想获得动物的可爱之处。你必须为此使用。

    (animal as Dog).cuteness
    

    【讨论】:

      【解决方案2】:

      我不确定,但是如果父类型可以访问其子属性,它会抛出继承提供的所有东西吗?

      我能想到的唯一方法是Animal有一个开放的财产cuteness可以被它的孩子继承

      abstract class Animal(val size: Int, open val cuteness: Int)
      
      class Dog(override val cuteness: Int): Animal(345, cuteness)
      
      

      这样,Dog实例或声明为Animal类型的任何实例都可以按照您希望的方式调用cuteness

      animal.cuteness
      

      或者只是像其他答案一样,将其转换回Dog类型

      【讨论】:

        猜你喜欢
        • 2012-10-18
        • 1970-01-01
        • 2018-10-05
        相关资源
        最近更新 更多