《从零开始学Swift》学习笔记(Day 41)——类的继承

原创文章,欢迎转载。转载请注明:关东升的博客

 

Swift中的继承只能发生在类上,不能发生在枚举和结构体上。一个类可以继承另一个类的方法、属性、下标等特征,当一个类继承其他类时,继承类叫子类,被继承类叫父类(或超类)。子类继承父类后,可以重写父类的方法、属性、下标等特征。

 

为了了解继承性,看这样一个场景:一位面向对象的程序员小赵,在编程过程中需要描述和处理个人信息,于是他定义了类Person,如下所示:

class Person {

    var name: String

    var age: Int

    

    func description() -> String {

        return "\(name) 年龄是: \(age)"

    }

    init () {

        name = ""

        age  = 1

    }

}

一周以后,小赵又遇到了新的需求,需要描述和处理学生信息,于是他又定义了一个新的类Student,如下所示:

class Student {

    var name: String

    var age: Int

 

    var school: String

    

    func description() -> String {

        return "\(name) 年龄是: \(age)"

    }

    init() {

        school = ""

        name = ""

        age  = 8

    }

}

很多人会认为小赵的做法能够理解并相信这是可行的,但是问题在于StudentPerson两个类的结构太接近了,后者只比前者多了一个属性school,却要重复定义其他所有的内容,实在让人“不甘心”。Swift提供了解决类似问题的机制,那就是类的继承,代码如下所示:

class Student: Person {

    var school: String

    override init() {

        school = ""

        super.init()

        age  = 8

    }

}

Student类继承了Person类中的所有特征,“:”之后的Person类是父类。Swift中的类可以没有父类,例如Person类,定义的时候后面没有“:”,这种没有父类的就是基类

此外override init()是子类重写父类构造函数。

一般情况下,一个子类只能继承一个父类,这称为单继承,但有的情况下一个子类可以有多个不同的父类,这称为多重继承。在Swift中,类的继承只能是单继承。多重继承可以通过遵从多个协议实现。也就是说,在Swift中,一个类只能继承一个父类,但是可以遵循多个协议。

 

欢迎关注关东升新浪微博@tony_关东升
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

 


http://www.niftyadmin.cn/n/1036424.html

相关文章

竞赛最好用的平衡树-Size Balanced Tree(SBT)【建议收藏】

大家好。 前段时间我更新过AVL、红黑树以及搜索二叉树的简单讲解。今天我们还是围绕着平衡树的话题,来讲解一个很牛逼的平衡树结构。这种结构是我国的一位大牛:陈启峰。在2006年,他还在读高中阶段,所发明的一种平衡树结构&#x…

深入理解快速排序以及优化方式

可能经常看面经的同学都知道,面试所遇到的排序算法,快速排序占主要位置,热度只增不减啊,其次就是归并和堆排序。 其实以前写过一篇排序的文章,写的比较简单,只是轻描淡写。今天我再次重新拿起笔&#xff0…

《从零开始学Swift》学习笔记(Day 42)——构造函数调用规则

原创文章,欢迎转载。转载请注明:关东升的博客在构造函数中可以使用构造函数代理帮助完成部分构造工作。类构造函数代理分为横向代理和向上代理,横向代理只能在发生在同一类内部,这种构造函数称为便利构造函数。向上代理发生在继承…

常考排序算法之归并排序

前几天,我发布了一篇快速排序的帖子,今天我们还是围绕着排序这个话题,继续讲解第二热度的归并排序。归并的递归版本非常的简单,非递归版本的可能稍微要难一点点,但是,不要怕,这都是小问题。我们…

《从零开始学Swift》学习笔记(Day43)——构造函数继承

原创文章,欢迎转载。转载请注明:关东升的博客Swift中的子类构造函数的来源有两种:自己编写和从父类继承。并不是父类的所有的构造函数都能继承下来,能够从父类继承下来的构造函数是有条件的,如下所示。条件1&#xff1…

浅析Java中的泛型

hello &#xff01;大家好&#xff01; 今天的主题就是&#xff1a;泛型。在使用集合类时&#xff0c;大家就已经接触到泛型了&#xff0c;那就是每个集合类后面的尖括号<>&#xff0c;这样一对尖括号&#xff0c;在java中就称为泛型。那么泛型这一个点&#xff0c;我们…

《从零开始学Swift》学习笔记(Day 44)——重写属性

原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客重写实例属性我们可以在子类中重写从父类继承来的属性&#xff0c;属性有实例属性和静态属性之分&#xff0c;他们在具体实现也是不同的。实例属性的重写一方面可以重写getter和setter访问器&#xff0c;另一…

《从零开始学Swift》学习笔记(Day 45)——重写方法

&#xfeff;&#xfeff;原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客 重写实例方法在子类中重写从父类继承来的实例方法和静态方法。先介绍实例方法的重写。下面看一个示例&#xff1a;class Person { var name: Stringvar age: Int func descrip…