Swift學習這十七:重載(override)
創建一個基類: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
最後更新:2017-04-03 07:57:00