首页 > 技术文章 > swift-重写方法和属性、禁止重写

sayimba 2016-12-28 16:07 原文

/*子类可以为继承来的实例方法,类方法,实例属性,或下标提供自己定制的实现。我们把这种行为叫重写。
如果要重写某个特性,你需要在重写定义的前面加上   关键字。这么做,你就表明了你是想提供一个重写 版本,而非错误地提供了一个相同的定义。意外的重写行为可能会导致不可预知的错误,任何缺少   关键 字的重写都会在编译时被诊断为错误。
关键字会提醒 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 的。这样的类是不可 被继承的,试图继承这样的类会导致编译报错*/
    }

 

 

推荐阅读