スーパークラス
クラスの継承を確認する。スーパークラスの定義は次のようなイメージだ。
スーパークラスは明示的に「open」と記述しなければいけない。またオーバーライドを許可する関数にも「open」と記述する。
継承するクラスでは、変数定義と同じように:の次にスーパークラスを記述する。
関数のオーバーライドも明示的に「override」と記述する。
プログラム作成
プログラムを記述し確認する。クラスSuperのファイルを作成し次の内容を記述する。
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.example.myapplication import android.util.Log open class Super() { fun parent1(){ Log.d("Super","parent1") } open fun parent2(){ Log.d("Super","parent2") } } |
クラスSubでSuperを継承し関数をオーバライドする。
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.example.myapplication import android.util.Log class Sub(var name:String="山田",var age:Int=10,val country:String="Japan"):Super() { init { parent1() parent2() } override fun parent2() { Log.d("Sub","parent2") } } |
実行すると下記のように想定した結果になった。
1 2 |
D/Super: parent1 D/Sub: parent2 |
可視性修飾子
Kotlinの基本的なクラスが理解できたが、次に気になるのがアクセス修飾子だ。この部分はJavaと大差はないと考えていたが若干違うようだ。修飾子には次の種類ある。
修飾子 | 内容 |
---|---|
private | 宣言したファイルのみアクセス可能 |
protected | 宣言したファイルと継承したクラスでアクセス可能 |
internal | プロジェクトのソースファイル内でアクセス可能 |
public | どこからでもアクセス可能 |
何も指定しない場合はpublicとなる。
スーパークラス内にアクセス修飾子を付け確認する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com.example.myapplication import android.util.Log open class Super() { private var private_x=1 protected var protected_x=2 internal var internal_x = 3 public var public_c = 4 private fun private_function(){ Log.d("Super","parent1") } fun parent2(){ Log.d("Super","parent2") } } |
サブクラスからアクセスを行う。
クラスに関しては、この他にインタフェース、抽象クラス、データクラス?など把握する必要がありそうだ。しかしこれらのテーマはAndroidアプリを作成しながら、必要に応じて学習していくとする。