【学習kotlinシリーズ】セカンダリ・コンストラクタ
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
ディスカッション
コメント一覧
まだ、コメントがありません