LoginSignup
0
0

More than 3 years have passed since last update.

Kotlin入門:型変換

Posted at

型変換

型同士が継承・実装の関係にある場合には、相互に型変換が可能です。
入力例:

open class Person(){}
class MagickPerson():Person(){
    fun sayHello(){
        println("Hello")
    }
}
fun main() {
    val mp:Person = MagickPerson()
    println(mp is Person)
    println(mp is MagickPerson)
  if(mp is MagickPerson){
      mp.sayHello()
    }
}

上記のコードが実行可能なのはMagickPersonPersonの派生クラスだからです。
派生クラスのインスタンスは基底クラスのインスタンスとして使用できます。

したがって、派生クラスから基底クラスへの型変換は暗黙的に実施できます。

しかし、基底クラスから派生クラスへの必ずしも可能ではありません。
派生クラスが独自のメンバーを追加している可能性があるからです。

①では型を判定しています。このブロックの配下②であれば
暗黙的にその型として振る舞うことができる点に注意です。

実行結果は以下の通りです。

true
true
Hello

明示的なキャストをしたい場合

as演算子を使用します。
ただし、asによるキャストは失敗する可能性があります。

open class Person(){}
class MagickPerson():Person(){}
class Student():Person(){}
fun main() {
    val person:Person = MagickPerson()
    val mp1:MagickPerson = person as MagickPerson

    val student:Person = Student()
  val mp2:MagickPerson = student as MagickPerson
}

①でエラーが発生します。
変数studentPerson型ですが、実体はStudent型です。
したがって、MagickPerson型に変換することができません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0