Swift-重写与重载的使用和比较
来源:互联网 发布:淘宝怎么才能没有同款 编辑:程序博客网 时间:2024/05/17 22:02
1、重载:
- 函数名相同,参数名/参数类型/参数个数不同
- 重载函数并不仅仅局限于构造函数
- 函数重载是面相对象程序设计语言的重要标志
- OC 不支持函数重载,OC 的替代方式是 withXXX…
2、重写:
- 也叫覆盖,指在子类中定义一个与父类中方法同名同参数列表的方法。
- 重写是子类的方法覆盖父类的方法,要求方法名和参数都相同
- 因为子类会继承父类的方法,而重写就是将从父类继承过来的方法重新定义一次,重新填写方法中的代码。
- 重写必须继承,重载不用
假设有一个Person类,用于 “name” 和 “age” 两个属性,我们分别用重写和重载方法为其添加属性
创建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: "帅哥", age: 21, lesson: "HTML 5") print(s1.lesson) // HTML 5
总结:
- 通过重载,可以快速为方法添加新的属性,属性可以通过外部传入
- 重写,只能在方法内部设置属性,外部无法直观看到类的参数列表
0 0
- Swift-重写与重载的使用和比较
- 方法重写与方法重载的比较
- 关于重载和重写(覆盖)的比较
- swift: 方法的重载/重写/KVC构造
- 重写和重载与隐藏
- C++重写/重载/重定义的比较
- 函数的重载与重写
- 重载与重写的区别
- java的重载与重写
- 重写与重载的区别
- 函数的重载与重写
- 重载与重写的区别
- 重写与重载的重点
- 方法的重载与重写
- 重载与重写的区别
- 重写与重载的区别
- 重载与重写的区别
- 重写与重载的区别
- 从头到尾解析Hash表算法
- 2016保研综述
- NOIP游记TAT
- Leetcode349. Intersection of Two Arrays
- kruskal算法-最小生成树
- Swift-重写与重载的使用和比较
- 《outliers》/《异类》读后有所思
- POJ-2342-Anniversary party(树形DP)
- NSGA-II 非支配排序算法
- 项目可行性的研究内容
- Prime Ring Problem
- Spring点点滴滴之静态代理
- Unity中可用Lua版本效率分析比较
- NOIP2016 提高组 题解