Swift基础语法: 30 - Swift的基类, 子类, 重写, 重写方法, 重写属性, 防止重写
前面我們講了有關(guān)于腳本語(yǔ)法的基本認(rèn)識(shí)以及使用, 現(xiàn)在讓我們來(lái)看看Swift的其他東西:
1.基類(lèi)
所謂的基類(lèi), 就是OC中的父類(lèi), 不繼承任何類(lèi), 就叫做基類(lèi), 讓我們來(lái)看看例子:
class Vehicle {var currentSpeed = 0.0var description: String {return "traveling at \(currentSpeed) miles per hour"}func makeNoise() {} }let someVehicle = Vehicle() println("someVehicle: \(someVehicle.description)") // 打印出來(lái)的結(jié)果: someVehicle: traveling at 0.0 miles per hourPS: 這個(gè)類(lèi)雖然是沒(méi)有什么意義, 但它的的確確是一個(gè)基類(lèi), 在Swift中, 如果你沒(méi)有在這個(gè)類(lèi)名后面繼承與什么什么類(lèi), 那么就會(huì)自動(dòng)的變成基類(lèi).
2.子類(lèi)生成
所謂的子類(lèi), 其實(shí)和OC中的子類(lèi)一樣的, 它是基于基類(lèi)所新建的一個(gè)類(lèi), 這個(gè)類(lèi)就叫做子類(lèi), 它擁有父類(lèi)的所有特性, 同時(shí)它又可以有屬于自己的特性, 下面讓我們來(lái)看看例子:
class Bicycle: Vehicle {var hasBasket = false }let bicycle = Bicycle() bicycle.hasBasket = true bicycle.currentSpeed = 15 println("bicycle: \(bicycle.description)") // 打印出來(lái)的結(jié)果: bicycle: traveling at 15.0 miles per hourPS: 上面的例子就是Vehicle類(lèi)的子類(lèi), 它繼承與Vehicle的所有特性, 可以調(diào)用Vehicle類(lèi)里面的變量, 方法,等等, 同時(shí)它又有自己的屬性.
3.重寫(xiě)方法
在子類(lèi)中, 雖然擁有父類(lèi)的所有特性, 但在實(shí)際開(kāi)發(fā)中, 有一些特殊的情況, 父類(lèi)的方法不能滿足于子類(lèi)的需求, 但我們又不想去更改父類(lèi)的方法, 那么我們可以選在在子類(lèi)里去重寫(xiě)父類(lèi)的方法, 比如:
class Car: Vehicle {var gear = 1override var description: String {return super.description + " in gear \(gear)"} }let car = Car() car.currentSpeed = 25.0 car.gear = 3 println("Car: \(car.description)") // 打印出來(lái)的結(jié)果: Car: traveling at 25.0 miles per hour in gear 3PS: 沒(méi)錯(cuò), 有些眼睛犀利的朋友就看到了, 在Car這個(gè)子類(lèi)里, 有一個(gè)方法名和父類(lèi)的方法名是一樣的, 但在這個(gè)方法名前面, 加了一個(gè)override這個(gè)關(guān)鍵字, 這個(gè)就是Swift中的重寫(xiě)關(guān)鍵字.
4.重寫(xiě)屬性
在Swift中, 既然能重寫(xiě)父類(lèi)的方法, 那當(dāng)然也是可以重寫(xiě)父類(lèi)的屬性了, 讓我們來(lái)看看例子:
class SpeedLimitedCar: Car {override var gear: Int {get {return super.gear}set {super.gear = 2}} } let limitedCar = SpeedLimitedCar() limitedCar.gear = 60println("SpeedLimitedCar: \(limitedCar.gear)") // 打印出來(lái)的結(jié)果: SpeedLimitedCar: 2PS: 這里需要注意一點(diǎn)的就是, 必須通過(guò)get和set這種特性的方式來(lái)重寫(xiě)父類(lèi)的屬性.
5.防止重寫(xiě)
在上面的例子中, 如果我有某個(gè)類(lèi)的屬性或者方法不想被重寫(xiě), 只要在基類(lèi)定義的時(shí)候在前面加一個(gè)final關(guān)鍵字就可以防止被重寫(xiě), 下面讓我們來(lái)看看例子:
class Car: Vehicle {final var gear = 0final override var description: String {return super.description + " in gear \(gear)"} }class SpeedLimitedCar: Car {override var description: String {return "重寫(xiě)了"}override var gear: Int {get {return super.gear}set {super.gear = 2}} } // 報(bào)錯(cuò): Var overrides a 'final' var好了, 這次我們就講到這里, 下次我們繼續(xù)~
轉(zhuǎn)載于:https://www.cnblogs.com/iOSCain/p/4529358.html
總結(jié)
以上是生活随笔為你收集整理的Swift基础语法: 30 - Swift的基类, 子类, 重写, 重写方法, 重写属性, 防止重写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1.单人报价和成本价❓四川 6日游 35
- 下一篇: vagrant使用centos的环境安装