swift从零开始-14-继承

2017-11-21  本文已影响8人  SPIREJ

继承

本页内容包括:
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

上一篇下一篇

猜你喜欢

热点阅读