Swift 便利建構函式和指定建構函式繼承關係

2021-08-09 23:00:25 字數 2024 閱讀 2037

這裡先給出兩個類,乙個是person類,乙個是student類

import foundation

class person

//指定建構函式

init(name:string,weight:double)

//便利建構函式

convenience init(name:string,weight:double,height:double)

}

下面是student類,如果我們什麼方法都不去實現的話,那麼預設是繼承父類的所有的指定構造方法和便利建構函式

import uikit

class student: person

如下圖所示

如果我們在student類中重寫了父類的方法,還是說自定義了構造方法,都是不會去繼承父類的構造方法了

例如我們重寫了init(name:string)方法

class student: person 

}

我們在建立這個類的物件的時候如下圖所示,也就是student類中的方法了

而當我們重寫了person類中所有的指定構造方法的時候,那麼就會繼承父類的所有的便利建構函式

override init(name: string) 

override init(name: string, weight: double)

如下圖所示

在這裡需要注意的便利構造方法不能夠去重寫,如下圖所示

還有一點是如果乙個子類中任意的構造器和父類的便利構造器一模一樣, 不算重寫了父類的方法, 建立物件的時候只會顯示子類定義的便利構造器,就比如說我們的student類中的方法是這些,相當於多了個父類一模一樣的便利建構函式。

import uikit

class student: person

override init(name: string, weight: double)

convenience init(name:string,weight:double,height:double)

}

產生的效果如下圖所示

還有就是我們在student類中寫了這麼個方法,儘管和父類中的便利構造方法中的引數名字都相同,但是也不算重寫

init(name:string,weight:double,height:double)

總結如下1.也就是說如果我們子類沒有實現任何的構造方法,那麼就會預設的繼承父類中的所有的構造方法2.如果我們的子類重寫了父類的所有的構造方法,那麼就會繼承父類中的所有的便利構造方法3.如果我們子類中的乙個指定構造方法寫的引數和父類的便利構造方法的引數是一樣的,不算重寫

4.如果我們寫了和父類中一模一樣的便利構造方法,那麼我們在建立物件使用便利構造方法的的時候實現的就是子類的便利構造方法

指定與便利建構函式

指定建構函式和遍歷建構函式 對號官網 1 概念 1 指定 標配,至少乙個,初始化所有屬性 思考 怎麼判斷是不是指定函式?就看是不是初始化了所有儲存屬性。2 便利 輔助,最終呼叫本類裡的指定。思考 如何區分指定和便利?2 語法結構 便利建構函式需要在init前加上convinience關鍵字 3 必須...

swift構造器和析構器

1.構造器重載 函式有相同的名字 引數列表不同或返回值型別不同,或外部引數名不同 橫向 類似於值型別構造器 發生在同一類內部,這種構造器稱為便利構造器 在構造器前面加上了convenience關鍵字 向上 發生在繼承情況下,在子類構造過程中要先呼叫父類構造器,初始化父類的儲存屬性,這種構造器稱為指定...

Swift 構造與析構

在某些情況下系統會自動生成乙個構造器。使用構造器時注意事項。在 swift 中採用繼承式初始化方式。如果沒有在類中實現任何指定構造器,那麼將繼承父類中的所有指定構造器。父類 class transport 無引數指定構造器 init str string 子類 class car transport...