重写和重载

Posted 紫洁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重写和重载相关的知识,希望对你有一定的参考价值。

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)重写,只能在方法内部设置属性,外部无法直观看到类的参数列表

 

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

 

以上是关于重写和重载的主要内容,如果未能解决你的问题,请参考以下文章

方法重载和重写的区别

Java中重载(Overload)和重写(Override)的定义

重写和重载

java重构重载重写

关于重写和重载

重写和重载的区别