美文网首页
13.继承 Inheritance Swift官方文档——版纳的

13.继承 Inheritance Swift官方文档——版纳的

作者: KevinFromChina | 来源:发表于2018-03-28 21:22 被阅读0次
    //: Playground - noun: a place where people can play
    
    import UIKit
    
    // # 定义一个基类
    class Vehicle {
        var currentSpeed = 0.0
        var description: String {
            return "traveling at \(currentSpeed) miles per hour"
        }
        func makeNoise() {
            // do nothing by default
        }
    }
    
    // # 子类
    class Bicycle: Vehicle {
        var hasBasket = false {
            didSet {
                print("There is \(hasBasket ? "a" : "no") basket.")
            }
        }
    }
    class Tandem: Bicycle {
        var currentNumberOfPassengers = 0
    } // 双人自行车
    let tandem = Tandem()
    tandem.hasBasket = true // 可见属性观察者也会被继承
    
    // # 重写
    // 子类可以提供它自己的实例方法、类型方法、实例属性,类型属性或下标脚本的自定义实现,否则它将会从父类继承。
    // 一个命名为 someMethod() 的重写方法可以通过 super.someMethod() 在重写方法的实现中调用父类版本的 someMethod() 方法.
    // 一个命名为 someProperty 的重写属性可以通过 super.someProperty 在重写的 getter 或 setter 实现中访问父类版本的 someProperty 属性.
    // 一个命名为 someIndex 的重写下标脚本可以使用 super[someIndex] 在重写的下标脚本实现中访问父类版本中相同的下标脚本。
    // 重写整理:重写let存储属性 重写var存储属性  重写get计算属性 重写get-set计算属性
    // 为:     不能重写       get-set计算属性  get或get-set  get-set
    
    class Car: Vehicle {
        var gear = 1
        override var description: String {
            get {
                return super.description + " in gear \(gear)"
            }
        }
    }
    let car = Car()
    car.currentSpeed = 25
    car.gear = 3
    print("Car: \(car.description)")
    // 重写属性观察器
    class AutomaticCar: Car {
        override var currentSpeed: Double {
            didSet {
                gear = Int(currentSpeed / 10) + 1
            }
        }
    } // 注意:虽然写了是override,实际只是添加了属性观察器,其默认值不变且其还是存储属性
    let automatic = AutomaticCar()
    automatic.currentSpeed
    automatic.currentSpeed = 35
    print("AutomaticCar: \(automatic.description)")
    
    // # 阻止重写
    // 可以通过标记为终点来阻止一个方法、属性或者下标脚本被重写。通过在方法、属性或者下标脚本的关键字前写 final 修饰符(比如 final var , final func , final class func , fianl subscript )。
    // 在扩展中添加到类的方法、属性或下标脚本也可以在扩展的定义里被标记为终点。
    // 你可以通过在类定义中在 class 关键字前面写 final 修饰符( final class )标记一整个类为终点。任何想要从终点类创建子类的行为都会被报告一个编译时错误。
    

    相关文章

      网友评论

          本文标题:13.继承 Inheritance Swift官方文档——版纳的

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