Swift -- 重写

子类可以为继承来的实例方法,类方法,实例属性,或下标提供自己定制的实现。我们把这种行为叫做重写
如果要重写某个特性,你需要在重写定义的前面加上override关键字。这么做,你就表明了你是想提供一个重写版本,而非错误得提供一个相同的定义。
override关键字会提醒Swift编译器去检查该类的超类(或其中一个父类)是否有匹配重写版本的声明,这个检查可以确保你的重写定义时正确的。

  • 访问超类的方法,属性
    通过使用super前缀来访问超类版本的方法,属性。

  • 重写方法

class A {
    func make(){
        print("makeA");
    }
}
class B : A{
    override func make() {
        print("makeB");
    }
}
let a = A();
let b = B();
b.make()//输出 makeB
  • 重写属性
    重写继承来的实例属性类型属性,提供自己定制的settergetter,或添加属性观察器使重写的属性可以观察属性值什么时候发生变化。
    无论继承来的属性是存储型的还是计算型的 属性。子类并不知道继承来的属性是存储型的还是计算型的,它只知道继承来的属性会有一个名字和类型。你在 重写一个属性时,必需将它的名字类型都写出来。这样才能使编译器去检查你重写的属性是与超类中同名同类 型的属性相匹配的。
    你可以将一个继承来的只读属性重写为一个读写属性,只需要在重写版本的属性里提供gettersetter 即可。但是,你不可以将一个继承来的读写属性重写为一个只读属性
class A {
    var description : String {
        return "A的描述";
    }
    func make(){
        print("makeA");
    }
}
class B : A{
    var name = "geyang";
    override var description: String{
        get{
            return "B的描述\(name)";
        }
    }
    override func make() {
        print("makeB");
    }
}
let a = A();
let b = B();
print(b.description);//返回B的描述geyang
  • 防止重写
    可以通过把方法、属性或下标标记为final来防止它们被重写,只需要在声明关键字前加上final修饰符即可
    可以通过在关键class前添加final修饰符来将整个类标记为final的,这样的类是不可被继承
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容