Swift学习 OOP三大特性:继承、多态、封装

news/2024/7/1 2:40:38

先看个例子 
这里写图片描述
这里写图片描述

从上面的例子可以总结那么一句话:”学生是人”。也就是Student类继承People类。简而言之,学生是人,这句话是说得通的,但是”人是学生”这句话是说不通的,不是学生就不是人了嘛?

从代码中,我们可以看出Student具有People类的特征,同时也加入自己的新特性。也就是说下一层肯定是上一层,上一层不一定是下一层。由上到下,是个具体化 的过程;由下而上,是个抽象画的过程。

一、继承性 
1、概念: 我们使用”:”符号表示继承关系,在定义类时(子类)的类名后面加上”:”符号和基类名(父类),表示当前定义的类继承了该基类(父类)。

2、继承的好处 
(1)子类天然就获得父类的特征,大大减少代码的冗余。 
(2)子类可以重写父类的方法,表现出新的特性 
(3)通过继承,子类自动就获取父类相关的属性和方法 
(4)父类的属性和行为也是子类的

3、self和super的区别 
self:当前当前实例 
super: 用于访问父类(基类)的属性或者方法 
(用上面的例子可以说这么句话:要是学生的前提,首先你必须先具备人的属性和行为,否则你不可能成为学生。所以在初始化方法中,如果重写了父类的初始化方法,那必须调用父类的初始化方法),在子类中,访问父类的方法或者属性,既可以用self,也可以用super关键字。

4、”:” :父类的行为和属性也是子类的 
例如: 上面的例子:Student类继承People类,那么父类的name、professional属性也是Student本身具有的,所以在Student中访问name和professional既可以用self访问,也可以用super访问。

5、override :子类重写父类的方法,表现出新的特性 
例如: Student重写父类的初始化方法init()和say()方法,在say方法中,输出了新的特性,多个number属性。 
子类重写父类的方法,在子类的func前添加override关键字修饰,表示子类重写父类的方法。

6、final: 有些方法父类不希望子类去重写(权限设定) 
例如: People类的方法noAllowOverRide不允许子类Student去重写,那么仅需要在 noAllowOverRide 的func前添加final关键字修饰即可,表示父类不允许继承它的子类重写这个方法

7、重写和重载的区别 
重写: 同名、同参数(参数名、参数类型)、同返回值,针对不同对象,存在继承关系 
重载 : 在同一类实现多个同名的方法,参数名或者参数类型不同,方法名相同,针对同一个对象,不存在继承关系。

二、多态性 
1、定义: 同样的操作或方法,不同对象在执行时候表现出出现完全不同的行为 
2、多态的条件(下面两个条件必须同时满足,缺一不可) 
(1)必须存在继承关系 
(2)子类对父类的方法进行重写(同名、同参数<参数名、参数类型>、同返回值) 
3、多态的例子 
这里写图片描述
这里写图片描述

三、封装性 
1、封装的目的

(1)为了使我们使用数据更加方便 
(2) 为了数据保护

2、常用的访问修饰符 
(1)private(私有):只能在当前Swift源文件(当前类)中使用

(2)public(共有的):引用该文件,就能访问其属性和方法

(3)interval: 缺省情况下,所有的属性和方法都是interval访问级别。interval所修饰的属性或方法,在源代码所在的整个模块都可以使用。

注意:Swift对访问权限的控制,不是基于类,而是基于文件

3、访问修饰符的举例 
建立普通命令行文件File.Swift如下

这里写图片描述

在main.swift可直接对其一些属性访问 
这里写图片描述

0

http://lihuaxi.xjx100.cn/news/235630.html

相关文章

整理的一点MD5资料(第一部分)

MD5加密算法研究MD5简介&#xff1a; MD5的全称是Message-Digest Algorithm 5&#xff0c;在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明&#xff0c;经MD2、MD3和MD4发展而来。 Message-Digest泛指字节串(Message)的Hash变换&#xff0c;就是把一个任意长度的…

1001 害死人不偿命的(3n+1)猜想 (15 分)

题目链接 题目很简单验证给定的数需要经过几步才能到达1。 假设这个数n如果n是偶数&#xff0c;n n/2;如果n是奇数&#xff0c;n(3*n1)/2c代码 #include <iostream> using namespace std; int main() {int count 0;int n;cin >> n;while (n ! 1) {//是偶数if (n …

iOS学习笔记--01swift实现提示框第三方库:MBProgressHUD

本文使用swift语言使用MBProgressHUD。 开源项目MBProgressHUD可以实现多种形式的提示框。使用简单&#xff0c;方便。GitHud的下载地址是&#xff1a;https://github.com/jdg/MBProgressHUD/ 下载完成后&#xff0c;将MBProgressHUD.h和MBProgressHUD.m拖入已经新建好的Swift项…

Netty - ByteBuf索引管理

2019独角兽企业重金招聘Python工程师标准>>> 之前写过一篇文章介绍过JDK里面InputStream的mark(readlimit)和reset()方法&#xff0c;Java IO&#xff1a;使用mark/reset实现替换文件中字符串。相应的&#xff0c;可以通过调用markReaderIndex()/markWriterIndex()/…

Swift项目引入第三方库的方法

分类&#xff1a;iOS&#xff08;55&#xff09; 目录(?)[] Swift项目引入第三方库的方法 转自 http://blog.shiqichan.com/How-To-Import-3rd-Lib-Into-Swift-Project/ 以下&#xff0c;将创建一个Swift项目&#xff0c;然后引入3个库&#xff1a; Snappy 简化autolayout代码…

实现nginx上配置免费证书Let's Encrypt

Lets Encrypt 的免费证书有效期为三个月&#xff0c;不过可以免费续期&#xff0c;写一个脚本定期更新即可。 准备一台nginx 服务器 &#xff0c;将以下三个附件上传到你的nginx服务器。 1、下载脚本文件&#xff0c;wget https://raw.githubusercontent.com/xdtianyu/scripts/…

inet_pton和inet_ntop函数

Linux下这2个IP地址转换函数&#xff0c;可以在将IP地址在“点分十进制”和“整数”之间转换 而且&#xff0c;inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。算是比较新的函数了。 inet_pton函数原型如下[将“点分十进制” &#xff0d;> “整数”] #include <sys/…

Swift2.0系列]Error Handling(项目应用篇)

1.FileManager中的应用 倘若你只是想看FileManager中的 Error Handling是如何实现的&#xff0c;请找到3.删除文件以及4.获取文件信息。我分别为你提供了do-catch以及try?的使用方法。 打开Xcode,选中Single View Application&#xff0c;输入项目名称例如FileManagerDemo,点击…