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

     

TAGS:

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

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

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

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

オーバーライド例

親クラスが持つ 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] クラスプロパティをオーバーライドする

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

Swift おすすめ本

Swift を深く理解するには、以下の本がおすすめです。

コメントを残す

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