美文网首页
swift从零开始-14-继承

swift从零开始-14-继承

作者: SPIREJ | 来源:发表于2017-11-21 16:42 被阅读8次

    继承

    本页内容包括:
    1.定义一个基类
    2.子类生成
    3.重写
    4.防止重写

    一个类可以继承另一个类的方法,属性,其他特性。当一个类继承其他类时,继承类叫做子类,被继承类叫做超类(或父类)。在swift中,继承是区分'类'与其他类型的一个基本特征。

    定义一个基类

    不继承于其他类,称之为基类。例:如下定义了一个车辆类

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

    Vehicle类定义了构造器来设置属性的值

    子类生成

    指的是在一个已有的类的基础上创建一个新的类。子类继承超类的特性,并且可以优化或改变它,还可以为子类添加新的特性。

    定义一个新的类叫Bicycle, 它继承了Vehicle的特性

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

    重写

    子类可以为继承来的实例方法,类方法,实例属性,或附属脚本提供自己定制的实现。把这种行为叫做重写。如果要重写某个属性,你需要在重新定义的前面加上override关键字。这么做,就表明你是想提供一个重写版本,而非错误的提供一个相同的定义。
    override关键字会提醒swift编译器去检查该类的超类(或其中一个父类)是否有匹配重写版本的声明。这个检查可以确保你的重写定义是正确的。

    1. 重写方法
    class Train: Vehicle {
        override func makeNoise() {
            print("Choo Choo")
        }
    }
    
    2. 重写属性

    可以重写继承来的实例属性和类型属性,提供自己定制的gettersetter

    class Car: Vehicle {
        var gear = 1
        override var description: String {
            return super.description + "in gear \(gear)"
        }
    }
    
    3. 重写属性观察器

    可以通过重写属性为一个继承来的属性添加属性观察器

    class AutomaticCar: Car {
        override var currentSpeed: Double {
            didSet {
                gear = Int(currentSpeed/10.0) + 1
            }
        }
    }
    
    4. 访问超类的方法,属性及下标

    在合适的地方,可以通过super前缀来访问超类版本的方法属性和小标。
    1.someMethod() -> super.someMethod()
    2.someProperty -> super.someProperty
    3.下标的重写实现中,可以通过super[someIndex]来访问超类版本中的相同下标

    防止重写

    可以通过把方法,属性或下标标记为final来防止它们被重写。在声明关键字前加上final修饰符即可:final varfinal funcfinal class func

    相关文章

      网友评论

          本文标题:swift从零开始-14-继承

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