Swift学习笔记13——类继承(Inheritance)
2015-10-05 09:42
387 查看
继承是类独有的,结构体和枚举类都不具有这个功能。
继承就好像子承父业一样,一个继承的类(称为子类subClass)可以获得被继承的类(称为父类superClass)的属性,方法和其他特性。
子类可以重写父类的方法,也可以添加自己的属性,还可以为继承而来的属性添加观察器(对继承而来的存储和计算属性都可以)
基类
一个不继承自任何类的类称为基类。在Swift中,是没有共同的终极父类的。oc和java都是有终级父类的。下面定义一个Animal基类。
继承语法
上面的Dog类继承自Animal类,并且添加了自己的name属性。我们可以修改一下dog继承的属性,然后打印一下
覆盖(override)父类属性
对于继承而来的存储属性或者计算属性,我们可以通过重写这个属性的getter和setter方法来实现覆盖。下面是几条规则:
1、当你重写了setter方法的时候,一定要重写getter方法。但是可以只重写getter方法。
2、覆盖属性的时候,属性名和类型都必须和继承的属性一致才算覆盖。并且前面要加上override关键字。
3、你可以将继承的只读属性重写为读写属性,但是不能将继承的读写属性重写为只读属性。
下面重写Animal的description属性
覆盖属性观察器
规则:
1、不能对继承的常量,或者只读属性添加属性观察器
2、不能同时对一个继承属性同时添加属性观察器和setter方法。因为setter方法已经可以提供属性观察器的功能。
3、即使覆盖了之后,如果父类的该属性有观察器,那么当值修改的时候,父类的观察器也会被调用。
覆盖父类方法
同样的,加上override后,重写父类方法就可以
防止覆盖
使用final关键字去修饰就可以了。比如
继承就好像子承父业一样,一个继承的类(称为子类subClass)可以获得被继承的类(称为父类superClass)的属性,方法和其他特性。
子类可以重写父类的方法,也可以添加自己的属性,还可以为继承而来的属性添加观察器(对继承而来的存储和计算属性都可以)
基类
一个不继承自任何类的类称为基类。在Swift中,是没有共同的终极父类的。oc和java都是有终级父类的。下面定义一个Animal基类。
class Animal { var life : Int = 0 var description: String{ return "An animal with a life of \(life)" } func makeSounds() { } }
继承语法
<span style="color:#ff0000;">class Dog: Animal</span> { var name : String = "larry" }
上面的Dog类继承自Animal类,并且添加了自己的name属性。我们可以修改一下dog继承的属性,然后打印一下
var dog = Dog() dog.life = 10 print("dog's life is",dog.life) //dog's life is 10
覆盖(override)父类属性
对于继承而来的存储属性或者计算属性,我们可以通过重写这个属性的getter和setter方法来实现覆盖。下面是几条规则:
1、当你重写了setter方法的时候,一定要重写getter方法。但是可以只重写getter方法。
2、覆盖属性的时候,属性名和类型都必须和继承的属性一致才算覆盖。并且前面要加上override关键字。
3、你可以将继承的只读属性重写为读写属性,但是不能将继承的读写属性重写为只读属性。
下面重写Animal的description属性
class Dog: Animal { var name : String = "larry" override var description: String { get{ return "It's a dog with the name of \(name)" } } }
覆盖属性观察器
规则:
1、不能对继承的常量,或者只读属性添加属性观察器
2、不能同时对一个继承属性同时添加属性观察器和setter方法。因为setter方法已经可以提供属性观察器的功能。
3、即使覆盖了之后,如果父类的该属性有观察器,那么当值修改的时候,父类的观察器也会被调用。
class Dog: Animal { var name : String = "larry" override var life: Int { didSet{ print("The dog's life is \(life)") } } override var description: String { get{ return "It's a dog with the name of \(name)" } } }
覆盖父类方法
同样的,加上override后,重写父类方法就可以
override func makeSounds() { print("wang! wang!") }
防止覆盖
使用final关键字去修饰就可以了。比如
final var
,
final func,
final class func,
final subscript
相关文章推荐
- Swift语法之 guard
- [swift]监测iphone自由落体动作
- Swift过程控制和功能
- Swift学习笔记12——下标(Subscripts)
- Swift学习笔记11——方法(Method)
- Swift学习笔记10——属性(Properties)
- Swift 线程
- Swift 2.0 之map 与 zip
- Swift学习笔记9——类和结构体(Classes and Structures)
- Swift学习- 继承(十三)
- Swift学习笔记8——枚举类(Enumerations)
- swift map
- 【面试必备】Swift 面试题及其答案
- 寒哥带你深入了解下Swift中的Value Type
- Swift-循环控制新特性
- Swift - 元组的用法
- Swift 运算符
- Swift学习(二)
- Swift学习(一)
- Swift中的数据类型