Swift 继承
2018-04-06 14:14
761 查看
前言
与其它面向对象语言一样,Swift 中的类也有继承特性。一个类可以继承另一个类的方法、属性和下标。
当一个类继承其它类,继承类叫子类,被继承类叫做超类或父类。
在 Swift 三大数据结构中,只有类拥有继承的特性,结构体和枚举是没有的。
在 Swift 中子类可以访问和调用父类中的属性、方法和下标,并且可以h使用关键字
override来重写。
1、Swift 继承
Swift 语言中使用:符号来表示继承的关系,在定义类时的类名后加上
:符号和基类名,表示当前定义的类继承了该基类。
继承后子类自动就获得了父类的相关属性和方法。
self 指向的是当前对象,而对于超类属性和方法的访问,如果继承自父类或祖先类的,就可以用 self 来访问。但在初始化方法中,我们调用父类的 init 方法时,只能用 super 来指向和访问。
2、重写(覆盖)
如果子类和父类的方法、属性重名,有一个专门的术语叫覆盖或者重写。我们可以在子类中写上同名,同样参数和返回值的方法,以重写父类中的相应方法。
参数一定要相同,否则就是重载,而不是重写或者覆盖。
可以将一个继承来的只读属性重写为一个只读属性,只需在重写版本的属性里提供
get方法和
set方法即可。
不可将一个继承来的读写属性重写为一个只读属性。
可以在属性重写中为一个继承来的属性添加属性观察者。
重写方法或参数时需在方法的
func前和属性的类型
var前加上
override关键字。
/// 父类 class Transport { var scope = "" func move() { print("move") } }
/// 子类 class Car: Transport { // 重写属性 override var scope: String { didSet { print("Car scope") } } // 重写方法 override func move() { print("Car move") } // 调用父类中的方法 func superMove() { super.move() } }
可以在不希望被子类重写的方法、属性或下标前面写上关键字
final,以防止他们被子类重写。甚至可以在类的定义前写上
final,使整个类都不能被继承。
class Transport { var scope = "" // 使得 move 方法不能被重写 final func move() { print("move") } }
// 使得 Transport 类不能被继承 final class Transport { var scope = "" func move() { print("move") } }
相关文章推荐
- Swift-继承、重写
- Swift2.1-继承
- Swift学习笔记2---继承(Inheritance)
- Swift 继承
- Swift中类的初始化器与继承
- Swift中文教程(十三) 继承
- Swift - 父子继承关系的初始化方法调用顺序
- Swift-继承
- Swift 继承Inheritance
- Swift 中类的初始化器与继承
- 11.1 Swift继承的概念和语法
- swift 学习记录(继承)
- Swift_学习笔记_继承
- swift继承自Objective-C基类时重载方法报错的问题
- Swift中的Class、单继承机制、静态方法
- Swift3.0学习笔记-Inheritance(继承)
- 【Swift学习】Swift编程之旅---继承(十七)
- swift继承
- swift之类的继承
- Swift-2.13继承