• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift-重写方法和属性、禁止重写

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

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
UIDatePicker在swift中的使用发布时间:2022-07-13
下一篇:
swift中音频播放与系统音频播放方法的封装发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap