当前位置: 首页 > 编程日记 > 正文

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

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

从上面的例子可以总结那么一句话:”学生是人”。也就是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

相关文章:

5折票倒计时3天 | 超干货议程首度曝光!2019 中国大数据技术大会邀您共赴

&#xff08;大会官网https://t.csdnimg.cn/U1wA&#xff09;2019年&#xff0c;大数据与人工智能的热度已经蔓延到了各个领域&#xff0c;智能交通、AIoT、智慧城市&#xff0c;智慧物流、AI中台、工业制造等各种黑科技成为热搜名词。而在今年的乌镇互联网大会上&#xff0c;大…

mysql select * f

mysql> select * from tb;-------------| id | name |-------------| 1 | tbone || 3 | 2d2 || 5 | 55 || 6 | 66 |-------------4 rows in set (0.00 sec)转载于:https://www.cnblogs.com/bashala/p/3974088.html

C++/C++11中用于定义类型别名的两种方法:typedef和using

类型别名(type alias)是一个名字&#xff0c;它是某种类型的同义词。使用类型别名有很多好处&#xff0c;它让复杂的类型名字变得简单明了、易于理解和使用&#xff0c;还有助于程序员清楚地知道使用该类型的真实目的。在C中&#xff0c;任何有效类型都可以有别名。 有两种方法…

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

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

2019北京智源大会在京开幕, 中外学术大咖共话人工智能研究前沿

10月31日&#xff0c;由北京智源人工智能研究院主办的2019北京智源大会在国家会议中心开幕&#xff0c;会期两天。智源大会是北京创建全球人工智能学术和创新最优生态的标志性学术活动&#xff0c;定位于“内行的AI盛会”&#xff0c;以国际性、权威性、专业性和前瞻性为特色&a…

linux中登录类型及配置文件

linux中登录shell的类型1.交互式登录&#xff1a;直接通过终端输入用户信息登录1&#xff09;login&#xff1a;2&#xff09;在shell中 su - usernamesu -l username2.非交互式登录1&#xff09;su username2&#xff09;图形界面的终端3&#xff09;执行脚本的过程用户配置文…

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代码…

最新NLP架构的直观解释:多任务学习– ERNIE 2.0(附链接)| CSDN博文精选

作者 | Michael Ye翻译 | 陈雨琳&#xff0c;校对 | 吴金笛来源 | 数据派THU&#xff08;ID&#xff1a;DatapiTHU&#xff09;百度于今年早些时候发布了其最新的NLP架构ERNIE 2.0&#xff0c;在GLUE基准测试中的所有任务上得分均远高于XLNet和BERT。NLP的这一重大突破利用了一…

C++中的内存对齐介绍

网上有很多介绍字节对齐或数据对齐或内存对齐的文章&#xff0c;虽然名字不一样&#xff0c;但是介绍的内容大致都是相同的。这里以内存对齐相称。注&#xff1a;以下内容主要来自网络。 内存对齐&#xff0c;通常也称为数据对齐&#xff0c;是计算机对数据类型合法地址做出了…

__cplusplus的用处

经常在/usr/include目录下看到这种字句&#xff1a; #ifdef __cplusplus extern "C" { #endif ... #ifdef __cplusplus } #endif 不太明白是怎么用的。今天阅读autobook&#xff0c;在第53页看到了作者的解释&#xff1a;C/C编译器对函数和变量名的命名方法不一样…

Linux下的内存对齐函数

在Linux下内存对齐的函数包括posix_memalign, aligned_alloc, memalign, valloc, pvalloc&#xff0c;其各个函数的声明如下&#xff1a; int posix_memalign(void **memptr, size_t alignment, size_t size); void *memalign(size_t alignment, size_t size); void *aligned_…

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

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

总点第一个视频产生选择偏差?Youtube用“浅塔”来纠正

作者 | Tim Elfrink译者 | Tianyu出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】本文来自于谷歌研究人员最近发表的一篇论文&#xff0c;介绍了视频平台 Youtube 的视频推荐方法&#xff0c;并在 RecSys 2019 大会上做了分享。本文总结归纳了一些论文中的重…

HTML样式offset[Direction] 和 style.[direction]的区别

为什么80%的码农都做不了架构师&#xff1f;>>> 以offsetLeft与style.left为例&#xff1a; offsetLeft使用的值是字符串&#xff0c;如“100px", style.left则使用数值&#xff0c;如 100 offsetLeft只可以读&#xff0c;因此用无法通过Js改变这个值实现样…

Ubuntu 14.04上安装pip3/numpy/matplotlib/scipy操作步骤

Ubuntu 14.04 64位上默认安装了两个版本的python&#xff0c;一个是python2.7.6,另外一个是python3.4.0&#xff0c;如下图所示&#xff1a; 安装完pip3的结果如下图所示&#xff1a; 升级完pip3的结果如下图所示: 安装完numpy的结果如下图所示: 通过sudo pip3 install matplot…

NSHelper.showAlertTitle的两种用法 swift

var model : CarCity CarCity() if (NSString.isNullOrEmpty(locationLabel.text)) { NSHelper.showAlertTitle(nil, message: "暂无法定位&#xff0c;请检查网络。", cancel: "确定") return } if (NSString.isNullOrEmpty(plateTextFild.text)) { NSHe…

通俗易懂:图卷积神经网络入门详解

作者 | 蝈蝈来源 | 转载自知乎用户蝈蝈【导读】GCN问世已经有几年了&#xff08;2016年就诞生了&#xff09;&#xff0c;但是这两年尤为火爆。本人愚钝&#xff0c;一直没能搞懂这个GCN为何物&#xff0c;最开始是看清华写的一篇三四十页的综述&#xff0c;读了几页就没读了&a…

Java数据结构一 —— Java Collections API中的表

1.Collection接口 位于java.util包中&#xff0c;以下是重要的部分。 1 public interface Collection<AnyType> extends Iterable<AnyType> 2 { 3 int size(); 4 boolean isEmpty(); 5 void clear(); 6 boolean add(AnyType x); 7 …

Swift 中的内存管理详解

这篇文章是在阅读《The Swift Programming Language》Automatic Reference Counting&#xff08;ARC&#xff0c;自动引用计数&#xff09;一章时做的一些笔记&#xff0c;同时参考了其他的一些资料。 在早期的 iOS 开发中&#xff0c;内存管理是由开发者手动来完成的。因为传统…

Ubuntu14.04 64位机上配置OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.4.3操作步骤

Ubuntu 14.04 64位上默认安装了两个版本的python&#xff0c;一个是python2.7.6,另外一个是python3.4.3。这里使用OpenCV最新的稳定版本3.4.2在Ubuntu上安装python3.4.3支持OpenCV的操作步骤如下&#xff1a; 1. 更新包&#xff0c;执行&#xff1a; sudo apt-get update sud…

“Python之父”从Dropbox退休

作者 | 若名出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;10 月 30 日&#xff0c;Python 之父 Guido Van Rossum 宣布将从工作六年的 Dropbox 公司退休&#xff0c;他在 Twitter 上转发了 Dropbox 团队写的《Thank you, Guido》公开信长文。Guido 表示&#xff0c…

谭浩强《C++程序设计》书后习题 第十三章-第十四章

2019独角兽企业重金招聘Python工程师标准>>> 最近要复习一下C和C的基础知识&#xff0c;于是计划把之前学过的谭浩强的《C程序设计》和《C程序设计》习题重新做一遍。 编译环境为&#xff1a;操作系统32位Win7&#xff0c;编译工具VC6.0 第十三章&#xff1a;输入输…

图像处理库(fbc_cv):源自OpenCV代码提取

在实际项目中会经常用到一些基本的图像处理操作&#xff0c;而且经常拿OpenCV进行结果对比&#xff0c;因此这里从OpenCV中提取了一些代码组织成fbc_cv库。项目fbc_cv所有的代码已放到GitHub中&#xff0c;地址为 https://github.com/fengbingchun/OpenCV_Test &#xff0c;它…

Swift2.x编写NavigationController动态缩放titleView

这两天看到一篇文章iOS 关于navigationBar的一些..中的动态缩放比较有意思,看了一下源码,然后用Swift写了一下,使用storyboard实现. 效果图: 部分代码: 设置滑动代理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26/**设置滑动代理- parameter scrollV…

云厂商和开源厂商“鹬蚌相争”,他却看到了开发者的新机会

作者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】过去一年&#xff0c;开发者生态发生了一些或巨大、或微妙的变化&#xff0c;大的变化如巨头云厂商正在通过开源、收购等方式争夺开发者生态&#xff0c;比如微软以 75 亿美金收购 GitHub&#xff…

Error: could not open 'D:\Program Files\Java\jre7\lib\amd64\jvm.cfg'

重装JDK后&#xff0c;因为没有装在以前的目录&#xff0c;运行java命令后报错&#xff0c;环境变量的设置都没有问题。解决方法&#xff1a;删除c:/windows/system32/目录下的java.exe 、javaw.exe、javaws.exe&#xff0c;找不到的话在C:\Windows\SysWOW64下找。删除三个文件…

循环神经网络(RNN)简介

人工神经网络介绍参考&#xff1a; https://blog.csdn.net/fengbingchun/article/details/50274471 卷积神经网络介绍参考&#xff1a; https://blog.csdn.net/fengbingchun/article/details/50529500 这里在以上两篇基础上整理介绍循环神经网络&#xff1a; 前馈网络可以…

Swift 中 10 个震惊小伙伴的单行代码

几年前&#xff0c;函数式编程的复兴正值巅峰&#xff0c;一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红。很快地&#xff0c;一系列使用其他语言实现这些单行代码的文章也随之出现&#xff0c;比如 Haskell&#xff0c;Ruby&#xff0c;Groovy&#xff0c;Clojure&a…

满12万送Mate 30 Pro?华为云“双十一”20+款明星产品齐上线

双十一这次是真的真的真真真来了&#xff0c;华为云11.11血拼风暴一促即发&#xff01;想好怎么玩转双十一了嘛&#xff1f;怎么买到低价高性价比的云主机&#xff1f;怎么抽到100%中奖的礼品&#xff1f;怎么当欧皇被免单&#xff1f;不仅红包、折扣、特惠、满赠、抽奖一样都没…

javascript json对象转字符串形式

2019独角兽企业重金招聘Python工程师标准>>> /*** json对象转字符串形式*/function json2str(o) {var arr [];var fmt function(s) {if (typeof s object && s ! null) return json2str(s);return /^(string|number)$/.test(typeof s) ? "" …