Swift之重写

子类中访问父类的方法、属性及下标

  • 访问父类的方法:super.someMethod()
  • 访问父类的属性:super.someProperty
  • 访问父类的下标:super[someIndex]

重写属性

重写一个属性时,必须将它的名字和类型都写出来。因为编译器需要检查重写的属性是否与父类中同名同类型的属性相匹配。

父类的只读属性可以被重写成读写属性(提供getter和setter),但继承来的读写属性不能被重写成只读属性。简单来说,就是父类没有的可以在子类提供,父类已有的子类不会没有。

如果在重写属性中提供了setter,那么你也一定要提供getter。如果不需要在重写版本中的getter里修改继承来的属性值,你可以直接通过super.someProperty来返回继承来的值,其中someProperty是被重写的属性。

重写属性观察器

不能给继承来的常量存储型属性(let)或只读计算型属性(只有getter方法的属性)添加属性观察器。这些属性的值是不可以被设置的,所以,为它们提供willSetdidSet实现是不恰当。
此外还要注意,不可以同时提供重写的setter和重写的属性观察器。如果你想观察属性值的变化,并且你已经为那个属性提供了定制的setter,那么你在setter中就可以观察到任何值变化了。(重写了setter的属性不能再提供属性观察器。)

防止重写

  • 防止方法、属性、下标标记被重写,只需要在声明关键字前加上final修饰符:

    final varfinal funcfinal class funcfinal subscript等。

  • 防止类被重写,在关键字class前添加final修饰符:

    final class