Swift-重寫與重載的使用和比較

1.重載:

  • 函數名相同,參數名;參數類型;參數個數不同
  • 重載函數并不僅僅局限于構造函數
  • 函數重載是面相對象程序設計語言的重要標志
  • OC 不支持函數重載,OC 的替代方式是 withXXX…

2. 重寫:

  • 也叫覆蓋,指在子類中定義一個與父類中方法同名同參數列表的方法。
  • 重寫是子類的方法覆蓋父類的方法,要求方法名和參數都相同
  • 因為子類會繼承父類的方法,而重寫就是將從父類繼承過來的方法重新定義一次,重新填寫方法中的代碼。
  • 重寫必須繼承,重載不用
  • 假設有一個Person類,用于 nameage 兩個屬性,我們分別用重寫和重載方法為其添加屬性

創建Person類

class Person: NSObject {

    var name: String // 姓名
    var age: Int     // 年齡

    // 構造函數
    init(name: String,age: Int) {
        self.name = name
        self.age  = age
        // 必須在 super.init() 之前 初始化對象
        super.init()
    }
}

通過重寫方法為其添加 “lesson” 屬性

class Student: Person {

    var lesson: String

    /// 重寫
    ///
    /// - Parameters:
    ///   - name: 姓名
    ///   - age:  年齡
    override init(name: String, age: Int) {

        lesson = "Python" // 必須放在super.init()之前

        super.init(name: name, age: age)

    }
}

/// 重寫實例化的對象
let s = Student(name: "Joyce", age: 18)
print(s.lesson) // Python

通過重載方法為其添加 “lesson” 屬性

class Student: Person {

    var lesson: String

    /// 重載
    ///
    /// - Parameters:
    ///   - name: 姓名
    ///   - age:  年齡
    ///   - lesson: 課程
    init(name: String, age: Int, lesson:String) {

        self.lesson = lesson

        super.init(name: name, age: age)
    }

}
/// 重載實例化的對象
let s1 = Student(name: "Yang", age: 21, lesson: "iOS")
print(s1.lesson) // iOS  

總結:

  • 通過重載,可以快速為方法添加新的屬性,屬性可以通過外部傳入
  • 重寫,只能在方法內部設置屬性,外部無法直觀看到類的參數列表
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容