《从零开始学Swift》学习笔记(Day 41)——类的继承
来源:互联网 发布:电源监控软件 编辑:程序博客网 时间:2024/05/16 07:52
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
override init() {
school = ""
super.init()
age = 8
}
}
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
override init() {
school = ""
super.init()
age = 8
}
}
Student类继承了Person类中的所有特征,“:”之后的Person类是父类。Swift中的类可以没有父类,例如Person类,定义的时候后面没有“:”,这种没有父类的就是基类。
此外override init()是子类重写父类构造函数。
一般情况下,一个子类只能继承一个父类,这称为单继承,但有的情况下一个子类可以有多个不同的父类,这称为多重继承。在Swift中,类的继承只能是单继承。多重继承可以通过遵从多个协议实现。也就是说,在Swift中,一个类只能继承一个父类,但是可以遵循多个协议。
0 0
- 《从零开始学Swift》学习笔记(Day 41)——类的继承
- 《从零开始学Swift》学习笔记(Day 41)——类的继承
- 《从零开始学Swift》学习笔记(Day 1)——我的第一行Swift代码
- 《从零开始学Swift》学习笔记(Day 3)——Swift 2.0之后增加的关键字
- 《从零开始学Swift》学习笔记(Day 3)——Swift 2.0之后增加的关键字
- 《从零开始学Swift》学习笔记(Day 14)——字符串的插入、删除和替换
- 《从零开始学Swift》学习笔记(Day 20)——函数中参数的传递引用
- 《从零开始学Swift》学习笔记(Day 14)——字符串的插入、删除和替换
- 《从零开始学Swift》学习笔记(Day 20)——函数中参数的传递引用
- 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义
- 《从零开始学Swift》学习笔记(Day 30)——选择类还是结构体呢?
- 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义
- 《从零开始学Swift》学习笔记(Day 30)——选择类还是结构体呢?
- 《从零开始学Swift》学习笔记(Day 2)——使用Web网站编写Swift代码
- 《从零开始学Swift》学习笔记(Day 17)——Swift中数组集合
- 《从零开始学Swift》学习笔记(Day 56)—— Swift编码规范之命名规范
- 《从零开始学Swift》学习笔记(Day 17)——Swift中数组集合
- 《从零开始学Swift》学习笔记(Day 56)——Swift编码规范之命名规范
- 使用回车键safari浏览器提交不了form表单
- 线程控制
- Java基础知识(七)——数据库分页
- js 上传图片
- 缺陷的管理步骤
- 《从零开始学Swift》学习笔记(Day 41)——类的继承
- android 流行框架之性能优化----ACRA(崩溃报告)
- js call与apply
- mysql 查询邻近的两条记录并合并成一条
- TCP/IP详解学习笔记(5)-- ICMP:internet 控制报文协议
- 沉浸式状态栏
- Mac卸载Android Studio
- win7无法安装Microsoft .NET Framework 4.5\4.0
- hadoop优化:文件系统设置noatime