美文网首页
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-继承

    继承 本页内容包括:1.定义一个基类2.子类生成3.重写4.防止重写 一个类可以继承另一个类的方法,属性,其他特性...

  • 从零开始打造一个 Swift 网络框架

    从零开始打造一个 Swift 网络框架 从零开始打造一个 Swift 网络框架

  • 14-继承

    继承:让类之间存在父子关系,子类可以继承父类的属性和方法,简化代码。 继承特点: (1) 子类拥有父类非 priv...

  • iOS收藏文章-语言

    Swift Swift学习: 从Objective-C到Swift 在30 天内,从零开始学习Swift 不要用子...

  • OC Swift文件混编

    一.Swift 类可以继承 OC 类,OC 类不能继承 Swift 类。 二.Swift 和 OC 混编 三.两个...

  • oc 继承 swift 类

    oc 继承 swift 类 项目中使用 oc 继承 swift 类编译器报错: oc 继承前增加 objc_sub...

  • OC调用Swift

    OC调用Swift,Swift的类必须继承NSObject

  • Swift枚举高级用法(Enum)

    关于swift的枚举 一 swift对于枚举的扩展性(Enum) 枚举的继承(继承任何类和协议,目前除了swift...

  • 从零开始实现一个APNG Decoder(Swift, iOS)

    从零开始实现一个APNG Decoder(Swift, iOS) 本文基于Swift,开源项目地址:https:/...

  • 类继承

    继承是面向对象的重要特征之一。swift中的继承只能发生在类上,结构体和枚举不能继承。在swift中,一个类继承另...

网友评论

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

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