Swift --- 2.13继承


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 //重写
    }
}

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


//重写属性的Getters和Setters
class SpeedLimitedCar: Car {
    override var speed: Double  {
    get {
        return super.speed
    }
    set {
        super.speed = min(newValue, 40.0)
    }
    }
}

/**
注意:
你不可以为继承来的常量存储型属性或继承来的只读计算型属性添加属性观察器。这些属性的值是不可以被设置的,所以,为它们提供willSet或didSet实现是不恰当。此外还要注意,你不可以同时提供重写的 setter 和重写的属性观察器。如果你想观察属性值的变化,并且你已经为那个属性提供了定制的 setter,那么你在 setter 中就可以观察到任何值变化了。
*/

//重写属性观察器
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)"
    }
}

class ViewController: UIViewController {
                            
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let bicycle = Bicycle()
        println("Bicycle: \(bicycle.description())")
        // Bicycle: 2 wheels; up to 1 passengers
        
        //@final  可以防止重写
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}




你可能感兴趣的:(ios,swift)