resolve conflict

This commit is contained in:
numbbbbb
2014-06-14 20:41:51 +08:00
115 changed files with 251 additions and 189 deletions

16
source/chapter2/13_Inheritance.md Normal file → Executable file
View File

@ -13,7 +13,7 @@
一个类可以*继承inherit*另一个类的方法methods属性property和其它特性。当一个类继承其它类时继承类叫*子类subclass*,被继承类叫*超类或父类superclass*。在 Swift 中,继承是区分「类」与其它类型的一个基本特征。
在 Swift 中,类可以调用和访问超类的方法,属性和附属脚本subscripts并且可以重写override这些方法属性和附属脚本来优化或修改它们的行为。Swift 会检查你的重写定义在超类中是否有匹配的定义,以此确保你的重写行为是正确的。
在 Swift 中,类可以调用和访问超类的方法,属性和下标脚本subscripts并且可以重写override这些方法属性和下标脚本来优化或修改它们的行为。Swift 会检查你的重写定义在超类中是否有匹配的定义,以此确保你的重写行为是正确的。
可以为类中继承来的属性添加属性观察器property observer这样一来当属性值改变时类就会被通知到。可以为任何属性添加属性观察器无论它原本被定义为存储型属性stored property还是计算型属性computed property
@ -137,21 +137,21 @@ println("Tandem: \(tandem.description())")
<a name="overriding"></a>
## 重写Overriding
子类可以为继承来的实例方法instance method类方法class method实例属性instance property附属脚本subscript提供自己定制的实现implementation。我们把这种行为叫*重写overriding*。
子类可以为继承来的实例方法instance method类方法class method实例属性instance property下标脚本subscript提供自己定制的实现implementation。我们把这种行为叫*重写overriding*。
如果要重写某个特性,你需要在重写定义的前面加上`override`关键字。这么做,你就表明了你是想提供一个重写版本,而非错误地提供了一个相同的定义。意外的重写行为可能会导致不可预知的错误,任何缺少`override`关键字的重写都会在编译时被诊断为错误。
`override`关键字会提醒 Swift 编译器去检查该类的超类(或其中一个父类)是否有匹配重写版本的声明。这个检查可以确保你的重写定义是正确的。
### 访问超类的方法,属性及附属脚本
### 访问超类的方法,属性及下标脚本
当你在子类中重写超类的方法,属性或附属脚本时,有时在你的重写版本中使用已经存在的超类实现会大有裨益。比如,你可以优化已有实现的行为,或在一个继承来的变量中存储一个修改过的值。
当你在子类中重写超类的方法,属性或下标脚本时,有时在你的重写版本中使用已经存在的超类实现会大有裨益。比如,你可以优化已有实现的行为,或在一个继承来的变量中存储一个修改过的值。
在合适的地方,你可以通过使用`super`前缀来访问超类版本的方法,属性或附属脚本:
在合适的地方,你可以通过使用`super`前缀来访问超类版本的方法,属性或下标脚本:
* 在方法`someMethod`的重写实现中,可以通过`super.someMethod()`来调用超类版本的`someMethod`方法。
* 在属性`someProperty`的 getter 或 setter 的重写实现中,可以通过`super.someProperty`来访问超类版本的`someProperty`属性。
*附属脚本的重写实现中,可以通过`super[someIndex]`来访问超类版本中的相同附属脚本。
*下标脚本的重写实现中,可以通过`super[someIndex]`来访问超类版本中的相同下标脚本。
### 重写方法
@ -262,9 +262,9 @@ println("AutomaticCar: \(automatic.description())")
<a name="preventing_overrides"></a>
## 防止重写
你可以通过把方法,属性或附属脚本标记为*`final`*来防止它们被重写,只需要在声明关键字前加上`@final`特性即可。(例如:`@final var`, `@final func`, `@final class func`, 以及 `@final subscript`
你可以通过把方法,属性或下标脚本标记为*`final`*来防止它们被重写,只需要在声明关键字前加上`@final`特性即可。(例如:`@final var`, `@final func`, `@final class func`, 以及 `@final subscript`
如果你重写了`final`方法,属性或附属脚本,在编译时会报错。在扩展中,你添加到类里的方法,属性或附属脚本也可以在扩展的定义里标记为 final。
如果你重写了`final`方法,属性或下标脚本,在编译时会报错。在扩展中,你添加到类里的方法,属性或下标脚本也可以在扩展的定义里标记为 final。
你可以通过在关键字`class`前添加`@final`特性(`@final class`)来将整个类标记为 final 的,这样的类是不可被继承的,否则会报编译错误。