Swift 学习笔记 「继承」

#Program

定义一个基类

class Vehicle {
    var numberOfWheels: Int
    var maxPassengers: Int
    func description() -> String {
        return "\(numberOfWheels) wheels; up to \(maxPassengers) passengers"
    }
    init() {
        numberOfWheels = 0
        maxPassengers = 1
    }
}

子类生成

class Bicycle: Vehicle {
    init() {
        super.init()
        numberOfWheels = 2
    }
}

在 Swift 中,构造器默认是不继承的。

重写

要重写某个特性,你需要在重写定义的前面加上 override 关键字。

  • 重写方法

      class Car: Vehicle {
          var speed: Double = 0.0
          init() {
              super.init()
              maxPassengers = 5
              numberOfWheels = 4
          }
          override func description() -> String {
              return super.description() + "; "
                  + "traveling at \(speed) mph"
          }
      }
    
  • 重写属性

    重写属性的 getter 和 setter

      class SpeedLimitedCar: Car {
          override var speed: Double  {
          get {
              return super.speed  
          }
          set {
              super.speed = min(newValue, 40.0)
          }
          }
      }
    

    重写属性观察器

      class AutomaticCar: Car {
         var gear = 1
         override var speed: Double {
         didSet {
             gear = Int(speed / 10.0) + 1
         }
         }
         override func description() -> String {
             return super.description() + " in gear \(gear)"
         }
      }
    

防止重写

在方法,属性或下标脚本标记为 final 来防止它们被重写,只需要在声明关键字前加上 @final 特性即可。

你也可以通过在关键字 class 前加上 @final 来将整个类标记为 final,这样的类是不可被继承的。