Files
the-swift-programming-langu…/source/chapter2/13_Inheritance.md
2014-06-08 18:47:09 +08:00

52 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 继承
一个类可以继承另一个类的方法属性和其它特性。当一个类继承其它类继承类叫子类被继承类叫超类或父类。在Swift中继承是区分「类」与其它类型的一个基本特征。
在Swift中类可以调用和访问超类的方法属性和下标并且可以重写override这些方法属性和下标来优化或修改它们的行为。Swift会检查你的重写定义在超类中是否有匹配的定义以此确保你的重写行为是正确的。
可以为类中继承来的属性添加属性观察者property observer这样一来当属性值改变时类就会被通知到。可以为任何属性添加属性观察者无论它原本被定义为存储型属性stored property还是计算型属性computed property
## 定义一个基类
不继承于其它类的类,称之为基类。
> 注意Swift中的类并不是从一个通用的基类继承而来。如果你不为你定义的类指定一个超类的话这个类就自动成为基类。
下面的例子定义了一个叫`Vehicle`的基类。这个基类声明了两个对所有车辆都通用的属性(`numberOfWheels``maxPassengers`)。这些属性在`description`方法中使用,这个方法返回一个`String`类型的,对车辆特征的描述:
class Vehicle {
var numberOfWheels: Int
var maxPassengers: Int
func description() -> String {
return "\(numberOfWheels) wheels; up to \(maxPassengers) passengers"
}
init() {
numberOfWheels = 0
maxPassengers = 1
}
}
`Vehicle`类定义了初始化器initializer来设置属性的值。初始化器会在[构造函数]()一节中详细介绍,这里我们做一下简单介绍,以便于讲解子类中继承来的属性可以如何被修改。
初始化器用于创建某个类型的一个新实例。尽管初始化器并不是方法,但在语法上,两者很相似。初始化器的工作是准备新实例以供使用,并确保实例中的所有属性都拥有有效的初始化值。
初始化器的最简单形式就像一个没有参数的实例方法,使用`init`关键字:
init() {
// perform some initialization here
}
如果要创建一个`Vehicle`类的新实例,使用初始化器语法调用上面的初始化器,即类名后面跟一个空的小括号:
let someVehicle = Vehicle()
这个`Vehicle`类的初始化器为任意的一辆车设置一些初始化属性值(`numberOfWheels = 0 ``maxPassengers = 1`)。
`Vehicle`类定义了车辆的共同特性,但这个类本身并没太大用处。为了使它更为实用,你需要进一步细化它来描述更具体的车辆。
## Subclassing
## Overriding
## Preventing Overrides