《从零开始学Swift》学习笔记(Day 41)——类的继承
程序员文章站
2023-12-02 10:27:46
swift中的继承只能发生在类上,不能发生在枚举和结构体上。一个类可以继承另一个类的方法、属性、下标等特征,当一个类继承其他类时,继承类叫子类,被继承类叫父类(或超类)。子类继承父类后,可以重写父类...
swift中的继承只能发生在类上,不能发生在枚举和结构体上。一个类可以继承另一个类的方法、属性、下标等特征,当一个类继承其他类时,继承类叫子类,被继承类叫父类(或超类)。子类继承父类后,可以重写父类的方法、属性、下标等特征。
为了了解继承性,看这样一个场景:一位面向对象的程序员小赵,在过程中需要描述和处理个人信息,于是他定义了类person,如下所示:
一周以后,小赵又遇到了新的需求,需要描述和处理学生信息,于是他又定义了一个新的类student,如下所示:
很多人会认为小赵的做法能够理解并相信这是可行的,但是问题在于student和person两个类的结构太接近了,后者只比前者多了一个属性school,却要重复定义其他所有的内容,实在让人“不甘心”。swift提供了解决类似问题的机制,那就是类的继承,代码如下所示:
student类继承了person类中的所有特征,“:”之后的person类是父类。swift中的类可以没有父类,例如person类,定义的时候后面没有“:”,这种没有父类的就是基类。
此外override init()是子类重写父类构造函数。
一般情况下,一个子类只能继承一个父类,这称为单继承,但有的情况下一个子类可以有多个不同的父类,这称为多重继承。在swift中,类的继承只能是单继承。多重继承可以通过遵从多个协议实现。也就是说,在swift中,一个类只能继承一个父类,但是可以遵循多个协议。
为了了解继承性,看这样一个场景:一位面向对象的程序员小赵,在过程中需要描述和处理个人信息,于是他定义了类person,如下所示:
class person { var name: string var age: int func description() -> string { return "\(name) 年龄是: \(age)" } init () { name = "" age = 1 } }
一周以后,小赵又遇到了新的需求,需要描述和处理学生信息,于是他又定义了一个新的类student,如下所示:
class student { var name: string var age: int var school: string func description() -> string { return "\(name) 年龄是: \(age)" } init() { school = "" name = "" age = 8 } }
很多人会认为小赵的做法能够理解并相信这是可行的,但是问题在于student和person两个类的结构太接近了,后者只比前者多了一个属性school,却要重复定义其他所有的内容,实在让人“不甘心”。swift提供了解决类似问题的机制,那就是类的继承,代码如下所示:
class student: person { var school: string overrideinit() { school = "" super.init() age = 8 } }
student类继承了person类中的所有特征,“:”之后的person类是父类。swift中的类可以没有父类,例如person类,定义的时候后面没有“:”,这种没有父类的就是基类。
此外override init()是子类重写父类构造函数。
一般情况下,一个子类只能继承一个父类,这称为单继承,但有的情况下一个子类可以有多个不同的父类,这称为多重继承。在swift中,类的继承只能是单继承。多重继承可以通过遵从多个协议实现。也就是说,在swift中,一个类只能继承一个父类,但是可以遵循多个协议。
推荐阅读
-
《从零开始学Swift》学习笔记(Day 41)——类的继承
-
《从零开始学Swift》学习笔记(Day43)——构造函数继承
-
《从零开始学Swift》学习笔记(Day 23)——尾随闭包
-
《从零开始学Swift》学习笔记(Day 41)——类的继承
-
《从零开始学Swift》学习笔记(Day43)——构造函数继承
-
《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
-
《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射
-
《从零开始学Swift》学习笔记(Day 62)——Core Foundation框架之内存托管对象与非托管对象
-
《从零开始学Swift》学习笔记(Day3)——Swift2.0之后增加的关键字
-
《从零开始学Swift》学习笔记(Day 19)——函数参数传递