美文网首页程序员iOS 的那些事儿
Swift-重写与重载的使用和比较

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

作者: 热干面一元五 | 来源:发表于2018-04-24 10:47 被阅读168次

1.重载:

  • 函数名相同,参数名;参数类型;参数个数不同
  • 重载函数并不仅仅局限于构造函数
  • 函数重载是面相对象程序设计语言的重要标志
  • OC 不支持函数重载,OC 的替代方式是 withXXX…

2. 重写:

  • 也叫覆盖,指在子类中定义一个与父类中方法同名同参数列表的方法。
  • 重写是子类的方法覆盖父类的方法,要求方法名和参数都相同
  • 因为子类会继承父类的方法,而重写就是将从父类继承过来的方法重新定义一次,重新填写方法中的代码。
  • 重写必须继承,重载不用
  • 假设有一个Person类,用于 nameage 两个属性,我们分别用重写和重载方法为其添加属性

创建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: "Yang", age: 21, lesson: "iOS")
print(s1.lesson) // iOS  

总结:

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

相关文章

  • iOS复习之重写与重载

    iOS面向对象的三大特征 封装、继承、多态 Swift-重写与重载的使用和比较

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

    1.重载: 函数名相同,参数名;参数类型;参数个数不同 重载函数并不仅仅局限于构造函数 函数重载是面相对象程序设计...

  • JAVA基础之重写和重载

    重写和重载详细区分: Java 重写(Override)与重载(Overload) | 菜鸟教程 核心区分:重写(...

  • java面试题

    重载和重写 引用深入理解Java中的重写和重载 重写的条件 参数列表必须完全与被重写方法的相同;返回类型必须完全与...

  • 001Java中的重写和重载

    重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念 重载 简单说,就是函数...

  • java学习笔记

    1.方法重载和重写 方法重写与方法重载的区别 2.访问修饰符 访问权限 类 包 子类 其他包 ...

  • 方法重载与方法重写(@Overload @Override)

    java方法重载和方法重写(方法覆盖)的区别: 方法重载: Overload 方法重写: Override 批判,...

  • 面向对象的基本原则

    基本要素: 封装 , 继承 , 多态 多态 : 注意重写和重载 重写: 子类重写父类的方法 重载: 同样的方法名 ...

  • JAVA中重写和重载区别

    重写和重载区别 重写方法的规则如下: 参数列表:必须与被重写方法的参数列表完全匹配。 返回类型:必须与超类中被重写...

  • Java重写和重载

    本文参考菜鸟驿站Java 重写(Override)与重载(Overload) 重写(Override) 重写指子类...

网友评论

    本文标题:Swift-重写与重载的使用和比较

    本文链接:https://www.haomeiwen.com/subject/tmbdlftx.html