【Kotlin入門】⑥継承・例外処理
スポンサードリンク
おはようございます。Shotaです。
今日はKotlin文法の「継承」と「例外処理」について解説します。
継承
継承はすでにあるクラスの仕組みを別のクラスから再利用するための仕組みです。Kotlinの親クラスはAny
なので、全てのクラスにAny
が継承されています。Any
にはequals()
、hashCode()
、toString()
などが定義されています。
public open class Any { public open operator fun equals(other: Any?): Boolean public open fun hashCode(): Int public open fun toString(): String }
継承するクラスにはopen
を書きます。class
にはデフォルトでfinal
が定義されているので継承できないように設計されているからです。また、継承先では:
を使って継承クラスを指定しクラスを宣言します。
class Kotlin fun main() { val kotlin = Kotlin() println(kotlin.toString()) //アドレスが表示される }
▼実行結果
Kotlin@54bedef2
下のプログラムはClass1
のクラスを継承したClass2
クラスを実装したものになります。特定のクラスを継承したクラスのインスタンスを作って実行すると、継承元のクラスと作成したクラスの処理が同時に出力されます。
// 継承 open class Class1 { init { println("Hello Kotlin") } } class Class2: Class1() { val arg = 10 } fun main() { val ins = Class2() println(ins.arg) }
▼実行結果
Hello Kotlin 10
オーバーライド
親クラスにメソッドがある場合のオーバーライドについて説明します。クラスがfinal
であると同様に、その関数もfinal
となるので関数に対してもopen
を指定する必要があります。
関数に対してオーバライドする場合はoverride
を使います。
open class Language { open fun hello() { println("Hello Language") } } class Kotlin: Language() { override fun hello() { println("Hello Kotlin") } } fun main() { val kotlin = Kotlin() kotlin.hello() }
▼実行結果
Hello Kotlin
abstract
の利用
また、abstract
を用いて抽象化クラスとして宣言できます。クラスだけではなく、関数やプロパティなども抽象化できます。
abstract class Language { abstract fun hello() } class Kotlin: Language() { override fun hello() { println("Hello Kotlin") } } fun main() { val kotlin = Kotlin() kotlin.hello() }
▼実行結果
Hello Kotlin
例外処理
プログラミングにおいてエラーを避けることは難しいですが、エラーが発生した時に例外をあえて発生させることで、エラーを停止して例外処理として実行できます。例外を発生させるためにはthrow
を利用し、例外を処理するためにはtry-catch
を使用します。また、try
は式なので結果を受け取ることができます。
Throwable
は全てのエラーもしくは例外の基本的なクラスで、throw
あるいはtry-catch
でThrowable
のインスタンスを作ります。
実際に例外を発生させていきます。
fun main() { throw Exception("exception") }
▼実行結果
Exception in thread "main" java.lang.Exception: exception
throw
を利用して例外が発生し、プログラムを強制的に終了できます。Nothing
を返し、到達し得ないのがthrow
なのでNothing
を利用して表現されています。
では、次のプログラムではどうでしょうか?
fun main() { try { val num = 9 println(num / 0) } catch(e: Exception) { println(e.message) } }
▼実行結果
main.kt:4:17: warning: division by zero println(num / 0) ^ / by zero
上記のプログラムは整数を0で割った時に例外が発生してプログラムが強制終了するプログラムです。また、スタックトレースが表示されます。スタックトレースとは例外発生したファイルや行を示し、問題を特定するのに役立ちます。
例外が発生するとプログラムは強制終了するのが通例ですが、上記のプログラムではtry-catch
で例外ハンドリングしているので強制終了されず例外のメッセージが表示されます。try
は何かしらの処理を記述し、catch
で例外ハンドリングをします。
まとめ
今回の記事では、Kotlinで「継承」や「例外処理」について簡単に解説しました。
今回の記事はこれで終了です。