swift中的繼承

一個類可以從另一個類繼承方法、屬性和其他的特性。當一個類從另一個類繼承的時候,繼承的類就是所謂的子
類,而這個類繼承的類被稱爲父類。在Swift 中,繼承與其他類型不同的基礎分類行爲。

在 Swift 中類可以調用和訪問屬於它們父類的方法、屬性和下標腳本,並且可以提供它們自己重寫的方法,屬性 和下標腳本來定義或修改它們的行爲。Swift 會通過檢查重寫定義都有一個與之匹配的父類定義來確保你的重寫是正確的。

類也可以向繼承的屬性添加屬性觀察器,以便在屬性的值改變時得到通知。可以添加任何屬性監視到屬性中,不 管它是被定義爲存儲還是計算屬性。

定義一個基類

任何不從另一個類繼承的類都是所謂的基類

沒有指定特定父類的類都會以基類的形式創建。

子類

子類是基於現有類創建新類的行爲。子類從現有的類繼承了一些特徵,你可以重新定義它們。你也可以爲子類添 加新的特徵。

爲了表明子類有父類,要把子類寫在父類的前面,用冒號分隔:

1   class SomeSubclass: SomeSuperclass {
2       // subclass definition goes here
3   }

子類本身也可以被繼承。

重寫

子類可以提供它自己的實例方法、類型方法、實例屬性,類型屬性或下標腳本的自定義實現,否則它將會從父類繼承。這就所謂的重寫。

要重寫而不是繼承一個特徵,你需要在你的重寫定義前面加上 override關鍵字。

訪問父類的方法、屬性和下標腳本

你可以通過使用 super前綴訪問父類的方法、屬性或下標腳本

重寫方法

你可以在你的子類中重寫一個繼承的實例或類型方法來提供定製的或替代的方法實現。

1  class Train: Vehicle {
2      override func makeNoise() {
3           print("Choo Choo")
4      } 
5  }

重寫屬性

你可以重寫一個繼承的實例或類型屬性來爲你自己的屬性提供你自己自定義的 getter 和 setter ,或者添加屬性觀 察器確保當底層屬性值改變時來監聽重寫的屬性。

重寫屬性的getter和setter

你可以通過在你的子類重寫裏爲繼承而來的只讀屬性添加Getter和Setter來把它用作可讀寫屬性。總之,你不能把 一個繼承而來的可讀寫屬性表示爲只讀屬性。

重寫屬性觀察器

你可以使用屬性重寫來爲繼承的屬性添加屬性觀察器。
注意:

你不能給繼承而來的常量存儲屬性或者只讀的計算屬性添加屬性觀察器。這些屬性的值不能被設
置,所以提供 willSet 或 didSet 實現作爲重寫的一部分也是不合適的。

也要注意你不能爲同一個屬性同時提供重寫的setter和重寫的屬性觀察器。如果你想要監聽屬性值 的改變,並且你已經爲那個屬性提供了一個自定義的setter,那麼你從自定義的setter裏就可以監聽

阻止重寫

你可以通過標記爲終點來阻止一個方法、屬性或者下標腳本被重寫。通過在方法、屬性或者下標腳本的關鍵字前
final 修飾符(比如 final var , final func , final class func , fianl subscript )。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章