1 重载:
(1)函数名相同,参数名、参数个数、参数类型不同
(2)函数重载是面向对象程序设计语言的重要标志
(3)OC不支持重载,Swift支持重载
2 重写
(1)也叫覆盖,指在自类中定义一个与父类中方法同名同参数列表的方法
(2)重写是子类的方法覆盖父类的方法,要求方法名和参数都相同
(3)因为子类会继承父类的方法,而重写就是将从父类继承过来的方法重新定义一次,重新填写方法中的代码。
(4)重写必须继承,而重载不用
假设有一个Person类,用于 “name” 和 “age” 两个属性,我们分别用重写和重载方法为其添加属性
class Person: NSObject { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age super.init() } } class Student: Person { var lesson: String // 通过重写方法为其添加“lesson”属性 override init(name: String, age: Int) { lesson = "English" super.init(name: name, age: age) } // 通过重载方法为其添加“lesson”属性 init(name: String, age: Int, lesson: String) { self.lesson = lesson super.init(name: name, age: age) } } // 重写实例化的对象 let s1 = Student(name: "Tom", age: 20) s1.lesson // 重载实例化的对象 let s2 = Student(name: "Tom", age: 20, lesson: "Chinese") s2.lesson
总结:
(1)通过重载,可以快速为方法添加新的属性,属性可以通过外部传入
(2)重写,只能在方法内部设置属性,外部无法直观看到类的参数列表