派生类可以继承基类的方法、属性和其它特性(例如下标脚本)。 例如:当类B继承于类A时, A就是B的基类、B是A的派生类。 派生类可以调用基类的方法、属性和下标脚本, 也可以覆盖基类的方法、属性、下标脚本。 在使用override关键字覆盖基类属性、方法或下标脚本时, Xcode会自动判断基类是否有相同定义。Swift支持对基类和派生类的属性添加监听器。
跟C++/Java一样,Swift的类也支持多态。 下面通过一个简单例子说明语法:
this is SonClass
this is FatherClass
FatherClass property: 0
说明: Swift跟Java一样只支持单继承, 继承语法如上所示,在派生类后面跟着冒号和基类名称。
override关键字: 在Swift语法中派生类要覆盖基类方法、下标脚本和属性的get/set时,要使用override关键字。
this is SonClass
SonClass subscript
this is FatherClass
FatherClass property: 0
说明: 不能直接覆盖基类属性,否则Xcode会提示错误;如果需要覆盖基类的属性, 那么可以覆盖set/get方法。
print("count value: \(son.count)")
count value: 20
如果不希望派生类覆盖基类该怎么办? 想想Java/C++的final关键字, Swift同样使用final关键字使得类不能被覆盖。
包括final var(变量)、final func(方法)、final class func(静态方法)和final subscript(下标脚本)。
如果不希望有派生类, 跟Java做饭一样将类定义为final class。
继承很简单, 注意几个特点:
1、 只支持单继承, 即最多只有一个父类;
2、支持多态;
3、继承了基类的所有特性,包括属性、方法、下标脚本;
4、在覆盖时必须使用override关键字,不支持直接覆盖属性,只能覆盖属性的get/set方法。
5、支持final关键字,作用同Java。
总之, 对于Swift的继承特性, 记住单继承、override和final关键字就差不多了, Xcode会有足够的提示引导码农编写正确的语法。
下面举个例子:
(基类ScanViewController是自封装的framework中的类,在工程中继承这个类)