コンストラクタには、プライマリコンストラクタとセカンダリコンストラクタというのがある。

プライマリコンストラクタは、次のように書く。

class hoge constructor(a:String) {
    var hoge1:String = a
}

constructorを省略できて、次のようにも書ける。

class hoge(a:String) {
	・・・
}

コンストラクタの引数は、プロパティの初期化とイニシャライザブロックで使用できる。イニシャライザブロックは、インスタンス生成時に実行される。

class hoge constructor(a:String) {
    var hoge1:String = a
    var hoge2:String

    // イニシャライザブロック
    init {
        hoge2 = a
    }
}

セカンダリコンストラクタは、次のように書く。

class hoge2(a:String) {
    var hoge1:String = ""
    var hoge2:String = ""
    var hoge3:String = ""

    // イニシャライザブロック
    init {
        hoge1 = a
    }

    constructor(a:String, b:String):this(a) {
        hoge2 = b
    }

    constructor(a:String, b:String, c:String):this(a,b) {
        hoge3 = c
    }
}

別のコンストラクタを呼ぶには:this(…)を付ける。