継承はクラス名のあとに:(コロン)で継承元のクラス名を書いて親クラスのコンストラクタの引数を指定します。また、クラスをそのまま宣言するとデフォルトでは継承できないクラスになるので親クラスにはopenを付ける。こんなふうになる。

open class hoge {
    init {
        println("Init hoge")
    }
}

class hoge2:hoge() {
    init {
        println("Init hoge2")
    }
}

コンストラクタがある場合は、こんな感じだ。

open class hoge(a:String) {
    var hoge = a
    init {
        println("Init hoge")
    }
}

class hoge2(a:String):hoge(a) {
    init {
        println("Init hoge2")
    }
}

セカンダリコンストラクタで親クラスのコンストラクタを呼ぶ場合は、superを使う。こんな感じ。

class hoge2:hoge {
    constructor(a:String):super(a) {}
    init {
        println("Init hoge2")
    }
}

ちなみに上のソースではセカンダリコンストラクタで何も処理してないので最期の{}は省略できる。


このエントリーをはてなブックマークに追加 Clip to Evernote
ブログランキング・にほんブログ村へ
にほんブログ村

プロパティのgetter/setterは、こそっと作られるんだが、セットしたり取得したりするときになんか処理したいばあい、独自のgetter/setterを用意することもできる。

class hoge constructor(a:String) {
    var hoge1:String = a
        get() {
            println("get")
            return field
        }
        set(value) {
            println("set")
            field = value
        }
}

getter/setterでプロパティの実際のフィールドにアクセルするには上のソースのようにfieldを使用する。


このエントリーをはてなブックマークに追加 Clip to Evernote
ブログランキング・にほんブログ村へ
にほんブログ村

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

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

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(…)を付ける。


このエントリーをはてなブックマークに追加 Clip to Evernote
ブログランキング・にほんブログ村へ
にほんブログ村

↑このページのトップヘ