解析Swift語言面相物件程式設計中的繼承特性

2022-09-21 08:54:12 字數 3724 閱讀 6918

取大於形態的能力被定義為繼承。一般乙個類可以從另乙個類繼承屬性和方法。類可以進一步劃分到子類和超類。

子類:當乙個類從另乙個類繼承屬性,方法和功能被稱為子類

超類:類包含屬性,方法和功能被其它類繼承稱為超類

swift 中類包含父類和呼叫訪問方法,屬性,功能和重寫方法。另外,屬性觀察者也用於新增屬性和修改所儲存的或計算的特性的方法。

基類乙個類如果不從其它類繼承方法,屬性或功能,那麼它被稱為「基類」。

複製** **如下:

classstuddetails}let stname ="swift"let mark1 =98let mark2 =89let mark3 =76

println(stname)

println(mark1)

println(mark2)

println(mark3)

當我們使用 playground 執行上面的程式,得到以下結果。

swift

9889

76這裡 studdetails 類被定義為基類,它用於包含學生名字和三個科目標記為:mark1, mark2 和 mark3. 'let'關鍵字在 playground 中初始化並使用 「println」 函式列印顯示基礎類的值。

子類在現有的基類上定義乙個新的類就叫作「子類」。子類繼承了其基類的屬性,方法和功能。要定義乙個子類使用 「 :scv**fewnf 」 在基類名稱前。

複製** **如下:

classstuddetails

func print()}class display :studdetails}let marksobtained = display()

marksobtained.print()

當我們使用 playground 執行上面的程式,得到以下結果。

mark1:93, mark2:89

「studdetails」 類定義為學生標記宣告的超類以及子類的 'display' 從它的超類繼承以打的標記。子類定義學生標記和呼叫列印方法來顯示學生的標誌。

覆蓋/重寫

訪問超類的例項,型別方法,例如,型別屬性和下標子類提供覆蓋的概念。 'override' 關鍵字用來覆蓋超類中宣告的方法。

訪問超級類的方法,屬性和下標

「super」關鍵字作為字首用來訪問超類中宣告的方法,屬性和下標。

方法和屬性覆蓋 方法覆蓋

繼承例項和型別的方法可以通過 'override' 關鍵字覆蓋在子類中定義的方法。在這裡,在子類中重寫列印來訪問超類列印type屬性。

複製** **如下:

class cricket }class tennis: cricket  }let cricinstance = cricket()

cricinstance.print()let tennisinstance = tennis()

tennisinstance.print()

當我們使用 playground 執行上面的程式,得到以下結果。

welcome to swift super class

welcome to swift sub class

屬性重寫

可以覆蓋繼承的例項或類屬性來提供自定義的getter和setter 屬性,或新增屬性觀察者,當下層屬性值更改時以使重寫屬性到觀察者。

重寫屬性getter和setter

swift 允許使用者提供自定義 getter和setter 覆蓋繼承的屬性,無論是儲存還是計算屬性。子類不知道繼承的屬性名稱和型別。因此,至關重要的是,使用者需要在子類中指定,程式設計客棧名稱和在超類中指定重寫屬性的型別。

這可以通過兩種方式來完成:

當 setter 被定義為重寫屬性,使用者必須也要定義 getter。

當我們不希望修改繼承屬性的getter,我們可以通過簡單的語法「super.someproperty」來給超類繼承值。

複製** **如下:

classcircle}classrectangle:circle}let rect =rectangle()

rect.radius =25.0

rect.print=3

println("radius \(rect.area)")

當我們使用 playground 執行上面的程式,得到以下結果。

radius of rectangle for 25.0 is now overridden as 3

重寫屬性觀察者

當乙個新的屬性需要為繼承的屬性被新增,在 swift 中推出 「屬性重寫」 的概念。通知使用者當繼承屬性值被更改。但重寫不適用於繼承的常量儲存屬性和繼承唯讀計算屬性。

複製** **如下:

classcircle}classrectangle:circle}let rect =rectangle()

rect.radius =25.0

rect.print=3

println("radius \(rect.area)")classsquare:rectangle}}let sq =square()

sq.radius =100.0

println("radius \(sq.area)")

當我們使用 playgrouwww.cppcns.comnd 執行上面的程式,得到以下結果。

radius of rectangle for 25.0 is now overridden as 3

radius of rectangle for 100.0 is now overridden as 21

最終屬性以防止重寫

當使用者不需要讓別人訪問超類的方法,屬性或下標,swift 引入「final」屬性,以防止覆蓋。 當 「final」 屬性被宣告後,將不允許超類的方法,屬性和下標被覆蓋。在超類不可以有 'final' 。當 「final」 屬性被宣告後,使用者限制子類建立。

複製** **如下:

finalclasscircle}classrectangle:circle}let rect =rectangle()

rect.radius =25.0

rect.print=3

println("radius \(rect.area)")classsquare:rectangle}}let sq =square()

sq.radius =100.0

println("radius \(sq.area)")

當我們使用 playground 執行上面的程式,得到以下結果。

複製** **如下:

:14:18: error: var overrides a 'final' var

override var area: string {程式設計客棧

^:7:9: note: overridden declaration is here

var area: string {

^:12:11: error: inheritance from a final class 'circle'

class rectangle: circle {

^:25:14: error: var overrides a 'final' var

override var radius: double {

^:6:14: nscv**fewnfote: overridden declaration is here

final var radius = 12.5

當超類宣告為 「final」和資料型別也被宣明為'final',程式將不允許再建立子類,否則它會引發錯誤。

本文標題: 解析swift語言面相物件程式設計中的繼承特性

本文位址:

面相物件 面相過程

oc是物件導向 c面向過程 區別 面向過程 關注解決問題需要的步驟 物件導向 關注解決問題需要的物體 術語 面向過程 procedure oriented 物件導向 object oriented 物件導向程式設計 object oriented programming 類 物件 成員變數 區別 類...

面相物件基礎

1.方法的重寫 1 發生在父子類中,方法名相同引數列表相同,為方法的重寫。2 重寫的方法被呼叫的時候看物件的型別。注意事項 重寫需要遵循 兩同,兩小,一大的原則 1 兩同 方法名稱相同,引數列表相同 2 兩小 基本資料型別的方法的返回值必須相同。引用資料型別可以小於或者等於父類的資料型別。子類方法中...

面相物件,關於物件

1 萬物皆物件。將物件看做是乙個特別的變數,它是乙個可以儲存資料的東西,除此之外,你還可以要求它在自身上進行操作。理論上而言,萬物皆物件,可以抽取待求解的任何概念化構件,例如貓 狗 建築物 衣服等等。我們可以將他們表示成為程式中的物件。2 程式是物件的集合,他們通過傳送訊息來告知彼此所需要做的。要想...