创建一个基类:Vehicle.Swift
- import Foundation
- //
- // @brief 定义一个超类(车)
- //
- class Vehicle {
- var numberOfWheels: Int
- var maxPassengers: Int
- // designated initializer
- init() {
- numberOfWheels = 0
- maxPassengers = 2
- println("call vehicle designated initializer")
- self.nothingToDo()
- }
- func description() {
- println("Vehicle has (\numberOfWheels) wheels and can hold \(maxPassengers) passengers at most")
- }
- // 使用@final防止被重写
- @final func nothingToDo() {
- println("call nothingToDo() and it is used @final to avoid overriding")
- }
- }
再创建一个子类Bicycle.swift:
- import Foundation
- //
- // @brief 定义自行车类
- //
- class Bicycle : Vehicle {
- // override property
- override var numberOfWheels: Int {
- get { // 重写属性,调用super.propertyName
- println("overried property getter numberOfWheels")
- return super.numberOfWheels
- }
- set {
- println("overried property setter numberOfWheels")
- super.numberOfWheels = max(newValue, 40)
- }
- }
- // initializer 默认是不会被继承的
- init() {
- super.init() // initialize super class first
- println("called designated initializer")
- numberOfWheels = 2
- }
- // 重写方法
- override func description() {
- super.description()
- println("func description() was called in Bicycle")
- }
- // // 不能重写
- // override func nothingToDo() {
- //
- // }
- }
- import Foundation
- let bicycle = Bicycle()
- bicycle.numberOfWheels = 4
- println(bicycle.numberOfWheels)
- bicycle.maxPassengers = 84
- println(bicycle.maxPassengers)
- bicycle.description()
// 测试结果数据:
- call vehicle designated initializer
- call nothingToDo() and it is used @final to avoid overriding
- called designated initializer
- overried property setter numberOfWheels
- overried property setter numberOfWheels
- overried property getter numberOfWheels
- 40
- 84
- Vehicle has (
- umberOfWheels) wheels and can hold 84 passengers at most
- func description() was called in Bicycle
- Program ended with exit code: 0