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

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  

总结:

  • 通过重载,可以快速为方法添加新的属性,属性可以通过外部传入
  • 重写,只能在方法内部设置属性,外部无法直观看到类的参数列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值