重載構造函數
- Swift 中支持函數重載,同樣的函數名,不一樣的參數類型
/// `重載`構造函數
///
/// - parameter name: 姓名
/// - parameter age: 年齡
///
/// - returns: Person 對象
init(name: String, age: Int) {
self.name = name
self.age = age
super.init()
}
注意事項
- 如果重載了構造函數,但是沒有實現默認的構造函數 init(),則系統不再提供默認的構造函數
- 原因,在實例化對象時,必須通過構造函數爲對象屬性分配空間和設置初始值,對於存在必選參數的類而言,默認的 init() 無法完成分配空間和設置初始值的工作
調整子類的構造函數
- 重寫父類的構造函數
/// `重寫`父類構造函數
///
/// - parameter name: 姓名
/// - parameter age: 年齡
///
/// - returns: Student 對象
override init(name: String, age: Int) {
no = "002"
super.init(name: name, age: age)
}
- 重載構造函數
/// `重載`構造函數
///
/// - parameter name: 姓名
/// - parameter age: 年齡
/// - parameter no: 工號
///
/// - returns: Student 對象
init(name: String, age: Int, no: String) {
self.no = no
super.init(name: name, age: age)
}
注意:如果是重載的構造函數,必須 super 以完成父類屬性的初始化工作
重載和重寫
- 重載,函數名相同,參數名/參數類型/參數個數不同
- 重載函數並不僅僅侷限於構造函數
- 函數重載是面相對象程序設計語言的重要標誌
- 函數重載能夠簡化程序員的記憶
- OC 不支持函數重載,OC 的替代方式是 withXXX...
- 重寫,子類需要在父類擁有方法的基礎上進行擴展,需要 override 關鍵字