您的位置:首页 > 移动开发 > Swift

Swift-重写与重载的使用和比较

2016-11-28 20:24 148 查看

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


总结:

通过重载,可以快速为方法添加新的属性,属性可以通过外部传入

重写,只能在方法内部设置属性,外部无法直观看到类的参数列表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐