Swift基礎3.2——重載構造函數

重載構造函數

  • 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 關鍵字
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章