タイトルの質問に対する答えは「いいえ」だと確信しています。しかし、単純なコードを書いたのですが、コンパイルしようとすると奇妙なエラーが発生します。コード:
open class Animal (val stttt:String, val str:String = "hjm") {
open var fff: String = ""
open var image = ""
open val food = ""
open val habitat = ""
var hunger: Int? = 10
}
class Hippo ( var strrr:Int = 7) : Animal("just") {
override var image = "hippo.jpg"
override var food = "grass"
override val habitat = "water"
}
fun main(args: Array<String>) {
val hippo: Hippo? = Hippo()
hippo?.hunger = 5
println(hippo?.hunger) // println(hippo?.hunger as Int?) works!!
}
コードの最後の行:
println(hippo?.hunger) // println(hippo?.hunger as Int?) が動く!!
コンパイラに次のエラーを表示させます。
Hippo?.hunger は可変プロパティであり、この時点で変更されている可能性があるため、Int へのスマート キャストは不可能です。
しかし、次の行を削除すると、コードはコンパイルされます:
カバ?.空腹 = 5
誰かが私に説明できますか、コードが正常にコンパイルされないようにするこのコード行の何が問題なのですか?