【学習kotlinシリーズ】セカンダリ・コンストラクタ

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

Qiitaでことりん学習帳を発売しています!

セカンダリ・コンストラクタとは

通常のコンストラクタをプライマリ・コンストラクタといい、セカンダリ・コンストラクタはその名前の通り2つめのコンストラクタを指す。プライマリ・コンストラクタで指定した引数以外の引数をコンストラクタとして指定したい場合、セカンダリ・コンストラクタで指定しておくことで、コンストラクタとして設定できる。

セカンダリ・コンストラクタの指定の仕方

クラス内に次のように定義する。

class クラス名(引数1, 引数2){
    // セカンダリコンストラクタの定義
    constructor(引数1, 引数2, 引数3): this(引数1, 引数2){
    }
}

実際に書いてみる

セカンダリ・コンストラクタを実際に書いてみる。

/**
 * Created by umentu on 2017/06/02.
 */

// コンストラクタを設定
class MyGame(_hp: Int, _mp: Int){

    // セカンダリコンストラクタ
    constructor(_hp: Int, _mp: Int, _name: String): this(_hp, _mp){
        hp = _hp
        mp = _mp
        name = _name
    }

    // プロパティを定義
    var hp: Int = _hp
    var mp: Int = _mp

    // カスタムセッターを定義
    var name: String = ""
        set(value) {
            println("nameに${value}が設定されました。")
            // 値は field変数に格納する
            field = value
        }

    // カスタムゲッターを定義
    val nameLength: Int
        get(): Int {
            return this.name.length
        }


    // メソッドを定義
    fun getHP(): Int {
        return this.hp
    }

    fun getMP(): Int {
        // this は省略できる
        return mp
    }
}

fun main(args: Array<String>){

    // MyGameインスタンスの作成
    val hero: MyGame = MyGame(100, 20)

    // プロパティを設定
    hero.name = "John"

    // メソッドを実行
    print("現在のHP: ")
    println(hero.getHP())
    print("現在のMP: ")
    println(hero.getMP())
    print("名前の長さ: ")

    // カスタムゲッターで名前の長さを取得
    println(hero.nameLength)


    // セカンダリコンストラクタを利用してモンスターを作成
    val monster: MyGame = MyGame(200, 10, "umentu")

    // モンスターのステータスを表示
    print("モンスターの名前: ")
    println(monster.name)
    print("モンスターのHP: ")
    println(monster.getHP())
    print("モンスターのMP: ")
    println(monster.getMP())


}

実行結果

nameにJohnが設定されました。
現在のHP: 100
現在のMP: 20
名前の長さ: 4
nameにumentuが設定されました。
モンスターの名前: umentu
モンスターのHP: 200
モンスターのMP: 10

Related posts

コメントを残す