一、类的继承

类能够从其它类继承方法、属性以及其它特性,当一个类从另外的类继承时,继承的类称为子类,它继承的类称为超类。在Swift中,继承是类区别与其它类型(结构、枚举)的基础行为。

1.1 、类的继承

类的继承语法如下:

class SomeClass:
SomeSuperclass {

// class definition goes here

}

该例定义了一个新类SomeClass,它继承自SomeSuperclass类,SomeSuperclass类是SomeClass类的超类,SomeClass是SomeSuperclass类的子类。

子类继承和保留它的超类的所有特性(包括属性、方法和其它特性),并可以添加自己的方法、属性、下标等,以及可以重新实现(称为重写)继承的方法、属性或下标来提供自己的版本。

子类除了继承、重写实现自己的特性外,还可以添加其它超类没有的自己专有的方法、属性、下标。

1.2 类的重写

为了重写一个继承的特性,需要在重写的方法前面添加一个override关键字 。

在一个重写的方法中可以使用super关键字来调用和存取超类的方法、属性以及下标方法,如下例所示:

class Vehicle {

var numberOfWheels=0

var maxPassengers=1

func description()
->String {

return "\(numberOfWheels)
wheels; up to \  (maxPassengers)
passengers"

}

}

class Car:Vehicle
{

var speed:Double
=0.0

init() {

super.init()

maxPassengers =5

numberOfWheels =4

}

override func description()
->String {

return super.description()
+"; "

+"traveling at\(speed)
mph"

}

}

Vehicle类定义为基类。Swift中不提供一个被其它所有类继承的通用基类(根类),任何没有规定超类的类都称为基类。

定义的Car类是Vehicle类的子类,在Car类中使用override关键字重写了继承的方法description,在重写的方法description实现中,使用super关键字来调用超类的description方法,以便能够利用超类的description方法已经实现的功能,从而减少代码的重复。

在重写方法中,一个名字为someMethod的重写方法能使用super.someMethod() 来调用其超类的方法;一个名字为someProperty的重写属性能够在getter和setter实现中使用super.someProperty
来存取超类的属性;一个名字为someIndex的重写下标方法能使用super[someIndex] 来调用超类的下标方法。

通过提供特定的getter和setter来重写任意的继承的实例或类属性,也无论是继承的超类属性是一个存储属性还是一个计算属性。

通过重写,能够把一个继承的只读的属性改变为一个可读写属性,但不能把一个原先是可读写的属性修改为只读属性或只写属性。

使用属性重写还能为继承的属性添加属性观察者。

注意:你不能为一个继承的属性同时提供setter方法和添加属性观察者,也不能为继承的常量存储属性或继承的只读的计算属性添加属性观察者。

              为了避免方法和属性以及下标的重写,可以在方法、属性、下标的定义前面添加一个final标记来避免被重写,例如(@final var, @final func, @final class func,,@final subscript)。

             整个类也能被避免重写,在类定义时,在其class关键字前使用final 来标记整个类作为 final,这样,该类将不能被继承。

                                                    

                 

最新文章

  1. 使用CSS完美实现垂直居中的方法
  2. BZOJ 1111: [POI2007]四进制的天平Wag
  3. 小觑数据库(SqlServer)查询语句执行过程
  4. [Java拾遗四]JavaWeb基础之Servlet_Request&&Response
  5. Web前端工作2个月小结
  6. Failed to run the WC DB work queue associated with 错误的解决
  7. 使用CURL下载远程文件保存到服务器
  8. 让git忽略ignore所有文件,只对某些文件进行版本控制
  9. Lambdas in Java 8--reference
  10. LINQ to SQLite完美解决方案
  11. ASP.NET MVC请求处理过程
  12. CSS小tip整理
  13. form里两个submit按钮,在onsubmit中判断哪个被点
  14. 【高德地图API】那些年我们一起开发的APP—即LBS应用模式分享
  15. 2014-10-30NOIP复习题1
  16. ExtAspNet页面跳转的方法
  17. 解决用SHA256算法做私钥签名时,遇到“指定的算法无效”的问题
  18. BZOJ.5397.circular(随机化 贪心)
  19. [android] logcat简介
  20. 右击菜单一键优化(增加新建office2003、新建reg和bat,删除新建公文包、新建wps、新建rar)

热门文章

  1. SceneKit做一个旋转的地球效果
  2. [ExtJS5学习笔记]第二十五节 利用window.open()函数实现ExtJS5的登陆页面跳转
  3. Strom数据流分组解析
  4. 剑指Offer——银行网申内容模版
  5. 关于React Native项目在android上UI性能调试实践
  6. GDAL使用插件方式编译HDF4、HDF5以及NetCDF的bug修改
  7. jQuery Ajax 使用 ($.ajax、$.post、$.get)
  8. 01_MyBatis EHCache集成及所需jar包,ehcache.xml配置文件参数配置及mapper中的参数配置
  9. C++对C语言的变量检测增强
  10. 1085. Perfect Sequence (25) -二分查找