美文网首页iOS学习
关于swift的继承与重写

关于swift的继承与重写

作者: 苹果上的小豌豆 | 来源:发表于2018-09-16 17:29 被阅读2次

1.基类

定义一个基类

任何不从另一个类继承的类都是所谓的基类。(Swift 类不会从一个通用基类继承。你没有指定特定父类的类都会以基类的形式创建。)

2.子类

子类是基于现有类创建新类的行为。子类从现有的类继承了一些特征,你可以重新定义它们。你也可以为子类添加新的特征。

为了表明子类有父类,要把子类写在父类的前面,用冒号分隔:

子类本身也可以被继承。

3.重写

子类可以提供它自己的实例方法、类型方法、实例属性,类型属性或下标脚本的自定义实现,否则它将会从父类继承。这就所谓的重写

要重写而不是继承一个特征,你需要在你的重写定义前面加上 override关键字。这样做说明你打算提供一个重写而不是意外提供了一个相同定义。意外的重写可能导致意想不到的行为,并且任何没有使用 override关键字的重写都会在编译时被诊断为错误。

override关键字会执行 Swift 编译器检查你重写的类的父类(或者父类的父类)是否有与之匹配的声明来供你重写。这个检查确保你重写的定义是正确的。

访问父类的方法、属性和下标脚本

当你为子类提供了一个方法、属性或者下标脚本时,有时使用现有的父类实现作为你重写的一部分是很有用的。比如说,你可以重新定义现有实现的行为,或者在现有继承的变量中存储一个修改过的值。

你可以通过使用 super前缀访问父类的方法、属性或下标脚本。

重写属性

你可以重写一个继承的实例或类型属性来为你自己的属性提供你自己自定义的 getter 和 setter ,或者添加属性观察器确保当底层属性值改变时来监听重写的属性。

写属性的GETTER和SETTER

你可以提供一个自定义的Getter(和Setter,如果合适的话)来重写任意继承的属性,无论在最开始继承的属性实现为储属性还是计算属性。继承的属性是存储还是计算属性不对子类透明——它仅仅知道继承的属性有个特定名字和类型。你必须声明你重写的属性名字和类型,以确保编译器可以检查你的重写是否匹配了父类中有相同名字和类型的属性。

你可以通过在你的子类重写里为继承而来的只读属性添加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

        }

    }

}


阻止重写

你可以通过标记为终点来阻止一个方法、属性或者下标脚本被重写。通过在方法、属性或者下标脚本的关键字前写

final修饰符

(比如 final var, final func, final class func, final subscript)。

任何在子类里重写终点方法、属性或下标脚本的尝试都会被报告为编译时错误。你在扩展中添加到类的方法、属性或下标脚本也可以在扩展的定义里被标记为终点。

你可以通过在类定义中在 class关键字前面写 final修饰符( final class)标记一整个类为终点。任何想要从终点类创建子类的行为都会被报告一个编译时错误。

相关文章

  • 关于swift的继承与重写

    1.基类 定义一个基类 任何不从另一个类继承的类都是所谓的基类。(Swift 类不会从一个通用基类继承。你没有指定...

  • Swift--类继承

    继承概念 构造函数继承 重写 类型检查与转换 在Swift中,类的继承只能是单继承,而多继承可以通过遵从多个协议实...

  • iOS复习之重写与重载

    iOS面向对象的三大特征 封装、继承、多态 Swift-重写与重载的使用和比较

  • Swift 5.1 (13) - 继承

    继承 继承是一种基本行为:子类继承父类方法,属性和其他特性。子类可以重写父类的方法,属性。继承将类与Swift中的...

  • Swift 5.x - 初始化(中文文档)

    引言 继续学习Swift文档,从上一章节:继承,我们学习了Swift继承相关的内容,如继承的作用、重写父类的方法和...

  • Python 继承和重写

    继承与重写 1.重写 继承后,子类可以拥有除父类继承的内容以外的其他内容。 1.关于方法 a.在子类中可以直接添加...

  • Swift 继承之方法重写

    Swift 类继承时,需要方法重写,结果报错 :Overriding non-@objc declarations...

  • Swift语法--继承

    继承 Swift通过检查重写定义都有一个与之匹配的父类定义来确保重写是正确的 定义一个基类 子类 基于现有类创建新...

  • Swift枚举高级用法(Enum)

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

  • Swift中的final修饰符

    Swift中的final修饰符 Swift中的final修饰符可以防止类(class)被继承,还可以防止子类重写父...

网友评论

    本文标题:关于swift的继承与重写

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