Kotlinでは、コンストラクタを複数持つことが可能です。
それらをセカンダリコンストラクタといいます。
使用例を見て見ましょう
1 2 3 4 5 6 7 8 9 10 11 12 13 |
fun main(args: Array<String>) { var john = Person() // no name 0 print(john.name + " " + john.age) } class Person constructor(name: String, age: Int) { var name: String = name var age: Int = 0 // 引数なしのコンストラクタを定義する constructor() : this("no name", 0) } |
上記例では、セカンダリコンストラクタとして引数が空のものを定義し、
プライマリコンストラクタを呼び出しています。
デフォルト引数を持つコンストラクタ
コンストラクタにもデフォルト引数を持たせることが可能です。
例を見ましょう
1 2 3 4 5 6 7 8 9 |
fun main(args: Array<String>) { var john = Person("john") // john 0 print(john.name + " " + john.age) } class Person constructor(var name: String = "no name", var age: Int = 0) { } |
クラスPersonをインスタンス化する際、ageには0が初期値として入っているので、
name = john
age = 0
となります。
初期化処理を書きたい場合はinitへ
初期時の処理を書きたい場合は、
init{}
ブロックに記述します。
例を見ましょう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
fun main(args: Array<String>) { var jhon : Person = Person(-1) // 20 println(jhon.age) } class Person(var age : Int){ // 1.初期化時の処理を書きたい場合はinit{}ブロックへ init{ if(age < 0){ age = 20 } } } |
class Personはコンストラクタでageに値を代入するようになっています。
初期化時に実行されるinit{}ブロックでは、ageに-の値が入らないように、
-の場合はageに20を代入する処理を入れました。
main関数では、ageに-1を代入しているので、ageには20が代入されます。
code
more code
~~~~