《从零开始学Swift》学习笔记(Day43)——构造函数继承
程序员文章站
2023-08-15 12:32:17
swift中的子类构造函数的来源有两种:自己编写和从父类继承。并不是父类的所有的构造函数都能继承下来,能够从父类继承下来的构造函数是有条件的,如下所示。
条件1:如果子类没有定义任何指定构造函数,它...
swift中的子类构造函数的来源有两种:自己编写和从父类继承。并不是父类的所有的构造函数都能继承下来,能够从父类继承下来的构造函数是有条件的,如下所示。
条件1:如果子类没有定义任何指定构造函数,它将自动继承所有父类的指定构造函数。
条件2:如果子类提供了所有父类指定构造函数的实现,无论是通过条件1继承过来的,还是通过自己编写实现的,它都将自动继承所有父类的便利构造函数。
下面看示例代码:
条件1:如果子类没有定义任何指定构造函数,它将自动继承所有父类的指定构造函数。
条件2:如果子类提供了所有父类指定构造函数的实现,无论是通过条件1继承过来的,还是通过自己编写实现的,它都将自动继承所有父类的便利构造函数。
下面看示例代码:
class person { var name: string var age: int func description() -> string { return "\(name) 年龄是: \(age)" } convenience init () { self.init(name: "tony") self.age = 18 } convenience init (name: string) { self.init(name: name, age: 18) } init (name: string, age: int){ self.name = name self.age = age } } class student: person { var school: string init (name: string, age: int,school: string) { self.school = school super.init(name: name, age: age) } convenience overrideinit (name: string,age: int) { self.init(name: name, age: age, school: "清华大学") } } class graduate: student { var special: string = "" }
来看看符合条件1的继承,graduate继承student,graduate类没有定义任何指定构造函数,它将自动继承所有student的指定构造函数。符合条件1后,graduate从student继承了如下指定构造函数:
init (name : string, age : int,school : string)
再看符合条件2的继承,由于graduate实现了student的所有指定构造函数,graduate将自动继承所有student的便利构造函数。符合条件2后,graduate从student继承了如下3个便利构造函数:
init (name: string, age: int) init (name: string) init ()
上一篇: Photoshop 时尚的界面设计按钮
推荐阅读
-
《从零开始学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)——函数参数传递