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

先看个例子 
Swift学习 OOP三大特性:继承、多态、封装_第1张图片
Swift学习 OOP三大特性:继承、多态、封装_第2张图片

从上面的例子可以总结那么一句话:”学生是人”。也就是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、多态的例子 
Swift学习 OOP三大特性:继承、多态、封装_第3张图片
Swift学习 OOP三大特性:继承、多态、封装_第4张图片

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

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

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

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

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

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

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

Swift学习 OOP三大特性:继承、多态、封装_第5张图片

在main.swift可直接对其一些属性访问 
Swift学习 OOP三大特性:继承、多态、封装_第6张图片

0

你可能感兴趣的:(Swift学习 OOP三大特性:继承、多态、封装)