美文网首页
override(重载)

override(重载)

作者: 寒冬雪影 | 来源:发表于2018-07-04 16:25 被阅读14次

    创建一个基类: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() {
    //        
    //    }
    }
    

    在main.swift中测试:

    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
    
    
    

    相关文章

      网友评论

          本文标题:override(重载)

          本文链接:https://www.haomeiwen.com/subject/xmaeuftx.html