天天看點

Swift繼承(Inheritance)聲明基類子類化重寫防止重寫其他

玩過其他開發語言的小夥伴都知道繼承,也就是子類繼承父類的特性。這在開發過程中非常有用,可以節省大量工作量。

聲明基類

下面我們聲明一個常見的基類Base,有兩個屬性(count、description)和一個方法(inherited),其中description是隻讀的。

/// 基類
class Base {
    var count = 0.0
    var description: String {
        return "count:\(count)"
    }

    // MARK: 可繼承
    func inherited() {

    }

}           

子類化

子類繼承基類很簡單,聲明如下,子類和父類間用“:”隔開,如果有多個父類,父類間用“,”隔開。

/// 子類
class Subclass: Base {

}           

重寫

在子類中可以實作父類的所有特性,但是有的時候我們想擴充屬性或方法。這個時候就需要用到關鍵字Overriding。

下面讓子類重寫父類的屬性和方法。

class Subclass: Base {

    // 繼承的屬性和方法前都有override
    override var count:Double {
        didSet {
            print("\(__FUNCTION__)")
        }
    }

    override var description: String {
        return "\(__FUNCTION__)" + super.description
    }

    override func inherited() {
        print("\(__FUNCTION__)")
    }
}           

可以在屬性和方法前使用override,表示這個屬性和方法是繼承了父類。如果想調用父類的屬性或方法,隻需要使用super後面跟你想使用的屬性和方法。你可以了解為self代表目前類,super代表父類。

防止重寫

有的時候我們不希望其他人通過繼承改寫我們的特性,希望它是不可重寫的。這裡可以使用關鍵字final,如下所示:

  • final var/let:防止常量或變量被重寫;
  • final func:防止執行個體方法被重寫;
  • final class func:防止類型方法被重寫;
  • final subscript:防止下标方法被重寫;
  • final class:防止目前類被繼承。

這裡以執行個體方法舉例,在Base中添加如下方法:

final func preventing() {
    // 如果不想子類繼承,可在類、屬性或方法前添加final
}              

則子類Subclass不可重寫此方法。

其他

參考資料

The Swift Programming Language (Swift 2.1)

文檔修改記錄

時間 描述
2015-10-28 根據 The Swift Programming Language (Swift 2.1)中的Inheritance總結

版權所有:http://blog.csdn.net/y550918116j

上一篇: Swift_繼承
下一篇: swift 類繼承