[Swift] プロパティのオーバーライドの方法

Swift では、なんとなく、メソッドしかオーバーライドできないと思いがちですが、プロパティもオーバーライドできます。改めて説明してみます。

プロパティのオーバーライド

メソッドのオーバーライドと同様に、オーバーライドできます。

つまり、子クラス側で、親クラスと同名のプロパティを定義することでオーバーライドできます。

オーバーライド例

親クラスが持つ someProp プロパティを、子クラスでオーバーライドしてみます。

親クラス

someProp プロパティを定義しています。

親クラス

子クラス

同名のプロパティを定義することでオーバーライドします。

子クラス

上記のように、親クラスのプロパティには、”super.<プロパティ名>” でアクセスすることもできます。

注意点

  • プロパティのオーバーライドは、 final キーワードを付与することで禁止することができます
  • プロパティのタイプは同じでなければいけません
  • プロパティの read-only, read-write を変えようとすると制約がある
    親クラスで、read-only プロパティだったものについて、子クラスで、getter と setter を用意することで、read-write にすることはできます。
    親クラスで、read-write プロパティだったものについて、子クラスで、read-only としてプロパティをオーバーライドすることはできません。
  • 子クラスで、setter を定義したときは、getter も定義しないといけません。

まとめ

プロパティのオーバーライド
  • override を付与して、同名のプロパティを子クラスで定義する
  • タイプは、同じにしないといけない
  • final 指定すると、オーバーライドを禁止できる
  • 親クラスで read-write プロパティを子クラスで read-only プロパティとしてオーバーライドはできない
  • その他、制約あり

説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です