swift-重寫方法和屬性、禁止重寫

來源:互聯網
上載者:User

標籤:automatic   屬性   聲明   return   錯誤   err   car   重寫屬性   ring   

子類可以為繼承來的執行個體方法,類方法,執行個體屬性,或下標提供自己定製的實現。我們把這種行為叫重寫。如果要重寫某個特性,你需要在重寫定義的前面加上   關鍵字。這麼做,你就表明了你是想提供一個重寫 版本,而非錯誤地提供了一個相同的定義。意外的重寫行為可能會導致不可預知的錯誤,任何缺少   關鍵 字的重寫都會在編譯時間被診斷為錯誤。關鍵字會提醒 Swift 編譯器去檢查該類的超類(或其中一個父類)是否有匹配重寫版本的聲明。這個 檢查可以確保你的重寫定義是正確的。

 

     class Vehicle {    var currentSpeed = 0.0    var description: String {        return "traveling at \(currentSpeed) miles per hour"    }    func makeNoise() {        // 什麼也不做    } }//重寫方法/*在子類中,你可以重寫繼承來的執行個體方法或類方法,提供一個定製或替代的方法實現。*/class Bicycle: Vehicle {    override func makeNoise() {        print("Choo Choo")    }}//重寫屬性/*你可以重寫繼承來的執行個體屬性或類型屬性,提供自己定製的 getter 和 setter,或添加屬性觀察器使重寫的屬性 可以觀察屬性值什麼時候發生改變。*/class Car: Vehicle {    var gear = 1    override var description: String {        return super.description + " in gear \(gear)"    } }//重寫屬性觀察器/*你可以通過重寫屬性為一個繼承來的屬性添加屬性觀察器。這樣一來,當繼承來的屬性值發生改變時,你就會被 通知到,無論那個屬性原本是如何?的*/class AutomaticCar: Car {    override var currentSpeed: Double {                didSet {            gear = Int(currentSpeed / 10.0) + 1        }    }}class First_Demo1: UIViewController {    override func viewDidLoad() {        super.viewDidLoad()        let  bicycle = Bicycle()        print(bicycle.makeNoise())        // 列印 "Choo Choo"                let car = Car()        car.currentSpeed = 25.0        car.gear = 3        print("Car: \(car.description)")        // 列印 "Car: traveling at 25.0 miles per hour in gear 3"                let automatic = AutomaticCar()        automatic.currentSpeed = 35.0        print("AutomaticCar: \(automatic.description)")        // 列印 "AutomaticCar: traveling at 35.0 miles per hour in gear 4"               //防止重寫/*1、你可以通過把方法,屬性或下標標記為 final  來防止它們被重寫,只需要在聲明關鍵字前加上 final  修飾符即 可(例如:final var ,final func ,final class func ,以及final subscript )。2、如果你重寫了帶有  final 標記的方法,屬性或下標,在編譯時間會報錯。在類擴充中的方法,屬性或下標也可以在 擴充的定義裡標記為 final 的。3、你可以通過在關鍵字 class  前添加 final  修飾符( final class  )來將整個類標記為 final 的。這樣的類是不可 被繼承的,試圖繼承這樣的類會導致編譯報錯*/    }

 

swift-重寫方法和屬性、禁止重寫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.