Swift では、なんとなく、メソッドしかオーバーライドできないと思いがちですが、プロパティもオーバーライドできます。改めて説明してみます。
Sponsor Link
プロパティのオーバーライド
メソッドのオーバーライドと同様に、オーバーライドできます。
つまり、子クラス側で、親クラスと同名のプロパティを定義することでオーバーライドできます。
オーバーライド例
親クラスが持つ someProp プロパティを、子クラスでオーバーライドしてみます。
親クラス
someProp プロパティを定義しています。
親クラス
class BasePropClass {
var someProp:String = "test"
}
子クラス
同名のプロパティを定義することでオーバーライドします。
子クラス
class OverridePropClass: BasePropClass {
override var someProp: String {
get {
return String.init(super.someProp.reversed())
}
set(newValue) {
super.someProp = newValue
}
}
}
上記のように、親クラスのプロパティには、”super.<プロパティ名>” でアクセスすることもできます。
注意点
- プロパティのオーバーライドは、 final キーワードを付与することで禁止することができます
- プロパティのタイプは同じでなければいけません
- プロパティの read-only, read-write を変えようとすると制約がある
親クラスで、read-only プロパティだったものについて、子クラスで、getter と setter を用意することで、read-write にすることはできます。
親クラスで、read-write プロパティだったものについて、子クラスで、read-only としてプロパティをオーバーライドすることはできません。 - 子クラスで、setter を定義したときは、getter も定義しないといけません。
まとめ
プロパティのオーバーライド
- override を付与して、同名のプロパティを子クラスで定義する
- タイプは、同じにしないといけない
- final 指定すると、オーバーライドを禁止できる
- 親クラスで read-write プロパティを子クラスで read-only プロパティとしてオーバーライドはできない
- その他、制約あり
説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。
Swift おすすめ本
Swift を深く理解するには、以下の本がおすすめです。
リンク
Sponsor Link