1.重載:
- 函數(shù)名相同,參數(shù)名;參數(shù)類型;參數(shù)個數(shù)不同
- 重載函數(shù)并不僅僅局限于構(gòu)造函數(shù)
- 函數(shù)重載是面相對象程序設(shè)計語言的重要標(biāo)志
- OC 不支持函數(shù)重載已维,OC 的替代方式是 withXXX…
2. 重寫:
- 也叫覆蓋行嗤,指在子類中定義一個與父類中方法同名同參數(shù)列表的方法。
- 重寫是子類的方法覆蓋父類的方法垛耳,要求方法名和參數(shù)都相同
- 因為子類會繼承父類的方法栅屏,而重寫就是將從父類繼承過來的方法重新定義一次,重新填寫方法中的代碼堂鲜。
- 重寫必須繼承栈雳,重載不用
- 假設(shè)有一個Person類,用于
name
和age
兩個屬性,我們分別用重寫和重載方法為其添加屬性
創(chuàng)建Person類
class Person: NSObject {
var name: String // 姓名
var age: Int // 年齡
// 構(gòu)造函數(shù)
init(name: String,age: Int) {
self.name = name
self.age = age
// 必須在 super.init() 之前 初始化對象
super.init()
}
}
通過重寫方法為其添加 “l(fā)esson” 屬性
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)
}
}
/// 重寫實(shí)例化的對象
let s = Student(name: "Joyce", age: 18)
print(s.lesson) // Python
通過重載方法為其添加 “l(fā)esson” 屬性
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)
}
}
/// 重載實(shí)例化的對象
let s1 = Student(name: "Yang", age: 21, lesson: "iOS")
print(s1.lesson) // iOS
總結(jié):
- 通過重載,可以快速為方法添加新的屬性,屬性可以通過外部傳入
- 重寫,只能在方法內(nèi)部設(shè)置屬性,外部無法直觀看到類的參數(shù)列表