一、类的继承

类能够从其它类继承方法、属性以及其它特性,当一个类从另外的类继承时,继承的类称为子类,它继承的类称为超类。在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,这样,该类将不能被继承。

                                                    

                 

苹果新的编程语言 Swift 语言进阶(十)--类的继承的更多相关文章

  1. 苹果新的编程语言 Swift 语言进阶(十五)--协议

    协议定义了适合某个特定任务或功能需要的方法.属性和其它需求的一个蓝图.协议本身不提供这些需求的实现,它只是描述了一个任务或功能实现的蓝图. 协议与java 语言中的接口定义类似,都是描述了一个实现可以 ...

  2. 苹果新的编程语言 Swift 语言进阶(十四)--扩展

    扩展是为一个已经存在的类.结构.枚举类型添加新功能的一种方式,包括为不能存取源代码的那些已经存在的类型添加功能. 扩展类似于Objective-C语言中的类别,与类别不同的是Swift语言的扩展没有名 ...

  3. 苹果新的编程语言 Swift 语言进阶(十六)--泛型

    泛型允许你定义一个宽松.可重用的函数或者类型,使用泛型能够避免代码的重复,也能以更清楚和抽象的方式来表达程序的意图. 泛型是Swift语言提供的强大功能之一,Swift提供的许多标准库都使用了泛型来创 ...

  4. 苹果新的编程语言 Swift 语言进阶(一)--综述

    Swift 是苹果开发和提供的供开发IOS 和OS X应用的一门新的语言.Swift语言基于C 和Objective-C语言,除了提供C 和Objective-C语言具有的所有语法功能外,为了编程方便 ...

  5. 苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算

    一 基本操作运算 1. 赋值操作 在Swift 中,能够使用赋值操作为一个常量或一个变量赋值,也能够使用多元组一次为多个常量或变量赋值. Swift 的赋值操作与其他语言最大的不同是赋值操作除了可以为 ...

  6. 苹果新的编程语言 Swift 语言进阶(十一)--实例的初始化与类的析构

    一 .实例的初始化          实例的初始化是准备一个类.结构或枚举的实例以便使用的过程.初始化包括设置一个实例的每一个存储属性为一个初始值,以及执行任何其它新的实例能够使用之前需要的设置或初始 ...

  7. 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类

    Swift语言中,具有类特征的类型包括三种,即枚举类型.结构类型(包括基本类型,基本类型实际都是结构类型的特例).类.其中枚举类型.结构类型是属于值类型,类属于引用类型.三种类型都可以添加属性.方法. ...

  8. 苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型

    一.字符串( String  )和字符类型(Character) 字符串是一种字符的带次序的收集类型(相当于数组),字符是字符串中的元素. 在Swift 语言中,字符串是编码独立的Unicode字符的 ...

  9. 苹果新的编程语言 Swift 语言进阶(二)--基本数据类型

    一  .   常量和变量 Swift语言 对常量和变量的声明进行了明确的区分 Swift语言的常量类型比C 语言的constants类型更加强大,语义更加明确. 常量和变量的区别是常量在设置或初始化后 ...

随机推荐

  1. 计算机网络中的TCP/IP模型

    Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议.Inter ...

  2. T-SQL动态查询(2)——关键字查询

    接上文:T-SQL动态查询(1)--简介 前言: 在开发功能的过程中,我们常常会遇到类似以下情景:应用程序有一个查询功能,允许用户在很多查询条件中选择所需条件.这个也是本系列的关注点. 但是有时候你也 ...

  3. linux中exec和xargs命令的区别和优劣分析

    find的exec及ok命令 exec命令的格式为: exec command {} \; exec后面跟着的是操作命令,然后跟着{}表示每一个参数,然后空格,然后"\;".{}之 ...

  4. Dynamics CRM 非声明验证方式下连接组织服务的两种方式的性能测试

    今天看了勇哥的博文"http://luoyong0201.blog.163.com/blog/static/1129305201510153391392/",又认识到了一种新的连接 ...

  5. qq侧滑

    上一篇博客带大家实现了:Android 自定义控件打造史上最简单的侧滑菜单 ,有兄弟看了以后说,你这滑动菜单过时了呀~QQ5.0的效果还不错~~嗯,的确,上一篇也承诺过,稍微修改上一篇的代码,实现QQ ...

  6. Android开发小问题集

    由于安卓系统比较复杂,开发中会发中会碰见各种小问题,在此做一些记录,只要觉得有必要就会添加进来. 1.触屏鼠标模式和触屏模式 开发android4.3高通400平台时,用atmel_max 640T作 ...

  7. scala学习笔记5 (隐式转化/参数/类)

    隐式转化: 隐式参数: 隐式类:

  8. 并发编程(二):分析Boost对 互斥量和条件变量的封装及实现生产者消费者问题

    请阅读上篇文章<并发编程实战: POSIX 使用互斥量和条件变量实现生产者/消费者问题>.当然不阅读亦不影响本篇文章的阅读. Boost的互斥量,条件变量做了很好的封装,因此比" ...

  9. outlook邮箱邮件与企业邮箱同步(outlook本地文件夹邮件,web邮箱里没有)

    用惯了outlook2010, 问题:今天将邮件放到自定义文件夹后,发现在web邮箱中看不到邮件了.不能同步到企业邮箱. 解决忙了一天,才知道是账户类型问题,pop3类型,只下载不上传.所以outlo ...

  10. 敏捷测试(4)--基于story的敏捷基础知识

    基于story的敏捷基础知识----需求管理(一) 基于story进行需求管理 (1)使用story模式来管理需求,将庞大的MRD划分为一个个合适粒度,且可独立交付的story(通常每个story能在 ...