您的位置:首页 > 移动开发 > Swift

Swift学习笔记13——类继承(Inheritance)

2015-10-05 09:42 387 查看
继承是类独有的,结构体和枚举类都不具有这个功能。

继承就好像子承父业一样,一个继承的类(称为子类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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: