kotlin コンストラクタのオーバーロード

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

kotlin コンストラクタ記述の基本形

primary constructor
class Foo(str:String) : Bar(str){ }

この場合、Fooとその親クラスにStringを引数とするコンストラクタが定義された、されていることになる。また、クラス宣言で記述するclass Foo(str:String)はプライマリコンストラクタと呼ばれるコンストラクタとなる。

コンストラクタのオーバーロード

secondary constructor

では、Foo(str:String, num:Int)のコンストラクタを定義するにはどうするかというとセカンダリコンストラクタを使用する。

class Foo(str:String) : Bar(str){
    //セカンダリコンストラクタ
    constructor(str:String, num:Int):this(str){}
}

this(str)は、プライマリコンストラクタの記述がある場合、セカンダリコンストラクタからプライマリコンストラクタを呼び出す必要がある為の記述となる。

プライマリコンストラクタの省略

またJavaライクにプライマリコンストラクタを省略して記述することも可能。この時はプライマリコンストラクタが省略されているのでthis()の呼び出しが必要なくなる。

class Foo : Bar{
    constructor(var:String):super(var){ }
    //オーバーロード
    constructor(var:num):super(var.toString()){ }
    constructor(var:String, num:Int):super(var){ }
}

Javaに慣れている人はこのパターンが解釈しやすいかな。と思う。

もちろん、オーバーロードが必要ない時でも、

class Foo : Bar{
    constructor(var:String):super(var){ }
}

として記述することができる。