こんにちは😀
今回から、クラスの応用をみていきます。
そして今回は、init関数とconstructor関数を使ってみます。
まずは、init関数を書いてみます。
initは、初期化で使われる関数で、オブジェクトを作った時に定義されます。
例えばログの出力などで使用します。
class Keihin(val number:Int,val shina:String){
init{
println(“${number}番は・・・”)
}
}
main関数で、3行目に引数を渡して定義します。
fun main(args: Array<String>) {
val present = Keihin(1,”鉄道模型”)
println(present.shina + “を差し上げます!”)
}
実行します。
上記の3行目でオブジェクトが作成された際に、initの処理が実行されているのがわかります。
そして、constructor関数ですが、以前プライマリコンストラクタとして勉強しました。
今回は、セカンダリコンストラクタを使ってみます。
initは1つ定義できて必ず実行されますが、constructorは複数指定できて実行する処理を分けることができます。
プライマリコンストラクタは実行必須ですが、セカンダリコンストラクタはプライマリ以外のコンストラクタを表します。
以下の処理は、セカンダリコンストラクタを1つ持つクラスです。
7行目がセカンダリコンストラクタになり、引数にvalが付きません。
渡された値がプライマリコンストラクタによって、新しいオブジェクトを作ります。
「this(number,shina)」がそのことを表しています。
変数settingは、別の関数から値を渡しますが、渡されない場合は、プライマリコンストラクタのみが実行されます。
class Keihin(val number:Int,val shina:String){
init{
println(“${number}番は・・・”)
}
constructor(number:Int, shina:String, setting:MutableList<Keihin>)
:this(number,shina){
setting.add(this)
}
fun getPresets()=”${number}番は、${shina}を差し上げます。”
}
main関数では、5〜7行目でKeihinクラスのセカンダリコンストラクタを実行しています。
fun main(args: Array<String>) {
val setting = mutableListOf<Keihin>()
Keihin(2,”カメラ”,setting)
Keihin(3,”たこ焼き器”,setting)
Keihin(4,”USB”,setting)
setting.forEach { println(it.getPresets()) }
}
実行します。
initはオブジェクトが作成された時点で実行され、その後は3回セカンダリコンストラクタが呼ばれています。
initはわかりやすいですが、コンストラクタは慣れがいりますね💦
プライマリとセカンダリと理解した上で使い分けたいものですね。
今回はここまで🤚
では、また次回。
コメント