Swift继承

关键词:swift, 继承, 重写, override, final, private

继承

概述

  • 在Swift中继承是区别类与其他类型的基本特征。
  • 类可以调用父类的方法、属性、下标,并可以重写这些。
  • 基类不需要继承自任何类(OC中需要继承NSObject)。

基类示例

class FileClass {
    var name = "aa"
    var size = 11
    func displayInfo() {
        print("名称:\(name) 大小:\(size)")
    }
}

重写

重写方法

父类方法需要为非私有,即方法名前没有private修饰。

///子类
class VoiceFileClass : FileClass {
    //方法重写,override 重写的关键词
    override func displayInfo() {
        print("大小:\(size) 名称:\(name)")
    }
}

重写属性

  • 子类重写的set或get方法,父类必须也实现过。
  • 父类实现了的set或get或都实现了,子类也必须都实现。
  • 属性重写,相当于是重写属性的方法。
///基类
class FileClass {
    var ttNick = "mm"
    var nickName: String {
        set {
            ttNick = newValue
        }
        get {
            return ttNick
        }
    }
}

///子类
class VoiceFileClass : FileClass {
    //必须要父类的属性也实现了这些方法,才能被重写。
    override var nickName: String {
        set {
            ttNick = newValue + "666"
        }
        get {
            return ttNick + "777"
        }
    }
}

重写属性观察器

不需要父类实现过willSet或didSet方法。

///基类
class FileClass {
    var ttNick = "mm"
}

///子类
class VoiceFileClass : FileClass {
    //重写属性观察器,不要求父类实现过。
    override var ttNick: String {
        willSet {
            print("赋值前:\(ttNick)")
        }
        didSet {
            print("完成赋值后:\(ttNick)")
        }
    }
}

总结一下

属性相关的重写,其实就是在重写属性的方法,重写set、get需要父类也实现过,重写willSet、didSet不需要父类实现过。

防止重写

通过在属性、下标、方法、类前加final 修饰,可防止被重写。用于修饰类时,这个类将不能被继承。