Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >窥探Swift之类的继承与类的访问权限

窥探Swift之类的继承与类的访问权限

作者头像
lizelu
发布于 2018-01-11 08:10:29
发布于 2018-01-11 08:10:29
1.6K00
代码可运行
举报
文章被收录于专栏:青玉伏案青玉伏案
运行总次数:0
代码可运行

  上一篇博客《窥探Swift之别具一格的Struct和Class》的博客可谓是给Swift中的类开了个头。关于类的内容还有很多,今天就来搞一下类中的继承以及类的访问权限。说到类的继承,接触过面向对象编程(OOP)的小伙伴并不陌生,继承就是OOP编程中几大特征之一,所以还是有必要把类的继承拎出来聊聊的。说到访问权限,这个在OOP编程中也是不可或缺的。如果你接触过其他OOP的语言,你应该对private, public, protected并不陌生。在Swift这么面向对象的编程语言中,也有类似的概念,不过其具体表达的方式以及每种权限的作用域不同罢了。在Swift中的访问权限有private, internal与public。他们的作用域与其他语言还是有些区别的,这个稍后会细细的道来。

  今天的博客在类的内容中还是比较重要的,同时也是比较基础的东西,当然很有必要好好的搞一下喽。在介绍继承和访问权限时,在恰当的地方会类比一下Objc, 如果你没有接触过Objc, 那么没关系,你可以把类比的部分给忽略掉,这并不影响你对Swift相应内容的理解。好~开始今天博客的内容。

  一. 类的继承

  其实继承理解起来还是蛮简单的,说白了就是子承父业。子类可以继承父类的一些东西,在继承之时,父类可以选择一些东西留给子类,同时也可以保留一些东西作为私有(private)物品。同样,子类也可以选择一些东西进行继承,如果对继承的东西不太满意,子类就可以对继承过来的东西进行重新改造(override)以满足自己的需求。如果要定义抽象类,只需把该类的构造器定义为私有即可。下方将会给出类的继承的一些示例,通过这些事例来认识一下Swift中的继承。

  1. 父类的创建

    这里我们创建一个名为Father的父类,他类可以继承Father类。在Father类中有两个初始值为空串的属性变量,并且有一个含有默认值参数的构造器,还有一个是输出变量值的displayAllName()的方法。类中的代码比较简单,具体如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import Foundation
 2 class Father {
 3     var surname: String = ""
 4     var name:String = ""
 5     
 6     init(surname:String = "", name:String = "") {
 7         self.surname = surname
 8         self.name = name
 9     }
10     
11     func displayAllName() {
12         print("我叫\(self.surname)\(self.name)")
13     }
14 }

    如果要定义抽象类,只需把上面的构造器进行一个修改即可。抽象类即为专门用来做其他类的父类的类,抽象类不能够直接被实例化,所以把其构造器定义为私有的就可以达到不能直接被实例化的目的。如果要把上述类修改成抽象类,那么把上面的构造函数替换成下方私有的构造函数即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1     private init() {
2         self.surname = ""
3         self.name = ""
4     }

  2.实现Father的子类Children

Children类继承自Father类,并在Father类的基础上做了相应的扩充。Children中的构造器调用了父类的构造器来对父类的一些属性进行初始化,当然,你也可以直接使用self来访问父类的非私有属性进行初始化,因为Children是继承自Father的,所以Father中非私有的东西都是视为己有的所以可以使用self来访问父类非私有的东西。子类持有了父类的非私有的东西,同时还可以增加属于自己的东西,子类肯定是要在父类的基础上在添加一些属于自己特有的东西。Children添加了父类中没有的job和disPlayMyJob的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 class Children: Father {
 2     var job:String = ""
 3     
 4     init(surname:String = "", name:String = "", job:String = "") {
 5         super.init(surname: surname, name: name)
 6         self.job = job
 7     }
 8     
 9     func displayMyJob() {
10         print("我的工作是\(self.job)")
11     }
12     
13 }

  3.Children类的实例化

    Chidren就是个类,其使用方式没有什么特别之处,就是调用构造器来进行类的实例化。实例化后,就可以调用类的非私有的属性和方法了,具体代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1         let children = Children(surname:"li", name:"zelu", job:"Coder")
2         children.displayAllName()
3         children.displayMyJob()

  4.防止类的子类化

    抽象类的使命是专门用来继承的,而有些类是不想让其他类进行继承的(丁克家族)。举个例子,有些小夫妻呢,就不想要孩子,那么怎么办呢?在Swift中也是有final关键字的,被final关键字所修饰的类是不能用来继承的。我们可以把Father类定义成final类型,并观察Children发生的变化。下方是修改后Father类的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final class Father {
     ……………………
     ……………………    
}

    Father添加上final关键字修饰后如果Children还对其进行继承那么就会报下面的错误,如下所示:

  二、访问权限

    Swift中的访问权限与其他面向对象编程语言有所不同,虽然Swift中的访问权限也分为3个等级,但是每个等级所能访问的区域与其他编程语言相比还是有些区别的。在Swift的访问权限包括public, private, internal三种访问级别。下面将要对这三个级别一一进行介绍。

  • public: 公有访问权限,类或者类的公有属性或者公有方法可以从文件或者模块的任何地方进行访问。那么什么样才能成为一个模块呢?一个App就是一个模块,一个第三方API, 第三等方框架等都是一个完整的模块,这些模块如果要对外留有访问的属性或者方法,就应该使用public的访问权限。
  • private: 私有访问权限,被private修饰的类或者类的属性或方法可以在同一个物理文件中访问。如果超出该物理文件,那么有着private访问权限的属性和方法就不能被访问。
  • internal: 顾名思义,internal是内部的意思,即有着internal访问权限的属性和方法说明在模块内部可以访问,超出模块内部就不可被访问了。在Swift中默认就是internal的访问权限。

    关于访问权限的实例就不过赘述了,理解起来还算是简单的,今天的博客就先到这儿,接下来回继续更新关于Swift相关的博客。如有错误还望批评指正。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-12-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
通俗易懂PHP基础【10-类和对象(2)】
在你成长的过程中,人们总是会告诉你:这个世界就是……尽量不要撞了墙也不回头,要努力拥有美好的家庭,要学会享乐,要存下一点钱。那是一种非常有限的生活。生活可以变得更加多彩,只要你发现这样一个简单的事实:你周围的一切,即你所谓的生活,都是由不如你聪明的人组成的,你可以去改变它,可以去影响它,也可以做出自己的东西供他人使用。一旦意识到这一点,你将从此不同。
Lemon黄
2019/10/08
3980
通俗易懂PHP基础【10-类和对象(2)】
Java中的三大特性 - 超详细篇
大家好啊,我是汤圆,今天给大家带来的是《Java中的三大特性 - 超详细篇》,希望对大家有帮助,谢谢
汤圆学Java
2021/04/05
5640
开心档之Swift 访问控制
你可以明确地给单个类型(类、结构体、枚举)设置访问级别,也可以给这些类型的属性、函数、初始化方法、基本类型、下标索引等设置访问级别。
爱学iOS的小麦子
2023/03/06
1K0
Java 抽象类与final用法
 抽象类: 基于继承 抽象类和抽象方法的定义 父类的意义:  把子类共有的属性,抽取出来,达到代码的重用 抽象类不可被实例化 使用抽象类,限制实例化(只有派生类能实例化,父类不能实例化)  关键字:abstract  每个子类的实现不同 abstract也可用于方法---抽象方法  抽象方法没有方法体  抽象方法必须在抽象类里  抽象方法必须在子类中被实现,除非子类是抽象类(可以不实现) (抽象类没有方法体) 抽象方法的使用:  1)父类没有必要实例化,采用将父类定义成抽象类型  2)抽象类中的方法未必都
房上的猫
2018/03/14
8760
Java面向对象编程高级
在main方法中定义一个变量count,当一个小孩加入游戏后count++,最后个count 就记录有多少小孩玩游戏 。
timerring
2023/04/21
1.6K0
Java面向对象编程高级
面向对象的三大特性讲义
多个类中存在相同属性和行为时, 将这些内容抽取到单独的一个类中, 那么这多个类就无需再定义这些属性和行为了, 只要继承那个类即可. 这个关系, 就叫继承.
用户8870853
2021/08/30
5810
Swift4.0 访问权限
    目前有 open  public  internal  fileprivate  private 这五个访问权限,都可以修饰属性和方法。下面通过例子来分析五个访问权限的使用。
星宇大前端
2019/01/15
8060
【10】JAVASE-面向对象-继承【从零开始学JAVA】
Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
用户4919348
2024/05/25
560
【10】JAVASE-面向对象-继承【从零开始学JAVA】
万字长文详细总结!关于继承、重写与重载、封装、接口的硬核干货
Java语言在面向对象方面的知识点复杂繁琐,但是几乎是每个小伙伴学习编程必须踩的坑,其实,面向对象的底层都是一些计算机底层知识的结合,所以,不注重基础的程序猿,一定不是一个可以走的远的程序猿。那么,今天,我们先逐一地深入了解继承、重载、接口和构造器的知识。
CodeVald
2021/02/01
1K0
深入理解 Java 修饰符与封装:访问权限、行为控制与数据隐藏
Java 修饰符 用于控制类、属性、方法和构造函数的访问权限和行为。它们可以分为两组:
小万哥
2024/02/27
2770
深入理解 Java 修饰符与封装:访问权限、行为控制与数据隐藏
一文搞懂Java的 构造方法 和 访问权限
本文原创首发CSDN,本文链接https://blog.csdn.net/qq_41464123/article/details/107461710 ,作者博客https://blog.csdn.net/qq_41464123 ,转载请带上本链接,谢谢配合。
Designer 小郑
2023/08/01
2220
一文搞懂Java的 构造方法 和 访问权限
cpp继承中的那些事(上)
我们都知道(确性),面向对象的三大特性是封装、继承、多态,封装是基础,继承是关键,多态是补充,看吧,继承是关键,这么关键的东西我们当然有必要好好了解一下啦。
T1Am0
2022/09/13
4430
对象与类
1.对象与类 1.1对象 对象是由属性和方法组成的:是一个无序键值对的集合,指的是一个具体的事物 属性:事物的特征,在对象中用属性来表示(常用名词) 方法:事物的行为,在对象中用方法来表示(常用动词) 1.1.1创建对象 //以下代码是对对象的复习 //字面量创建对象 var ldh = { name: '刘德华', age: 18 } console.log(ldh); //构造函数创建对象 function Star(name, age) { this.name
梨涡浅笑
2020/10/27
5030
对象与类
【C++】继承 ④ ( 继承对访问控制权限的影响 | 访问权限判定 | 继承不包括构造与析构函数 | 继承改变成员访问权限 )
父类 的 成员变量 和 成员方法 的 访问属性 , 在 子类 中 是可以调整的 ;
韩曙亮
2023/10/15
3640
Java 继承、多态与类的复用
摘要:   本文结合Java的类的复用对面向对象两大特征继承和多态进行了全面的介绍。首先,我们介绍了继承的实质和意义,并探讨了继承,组合和代理在类的复用方面的异同。紧接着,我们根据继承引入了多态,介绍了它的实现机制和具体应用。此外,为了更好地理解继承和多态,我们对final关键字进行了全面的介绍。在此基础上,我们介绍了Java中类的加载及初始化顺序。最后,我们对面向对象设计中三个十分重要的概念–重载、覆盖与隐藏进行了详细的说明。
全栈程序员站长
2022/09/08
8180
Java访问权限之 protected详解「建议收藏」
摘要:     对于类的成员(包括成员变量和成员方法)而言,其能否被其他类所访问,取决于该成员的修饰词;而对于一个类而言,其能否被其他类所访问,也取决于该类的修饰词。在Java中,类成员访问权限修饰词有四类:private,无(包访问权限),protected 和 public,而其中只有包访问权限和public才能修饰一个类(内部类除外)。由于很多Java书籍对protected可见性的介绍都比较笼统,本文重点说明了protected关键字的可见性内涵。
全栈程序员站长
2022/11/18
1.4K0
JAVA基础(38) java四大特性理解(封装、继承、多态、抽象)
JAVA基础(38) java四大特性理解(封装、继承、多态、抽象)
Java架构师必看
2021/06/16
2.4K0
python3 入门 (四) 类与继承
Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。 对象可以包含任意数量和类型的数据。 python类与c++类相似,提供了类的封装,继承、多继承,构造函数、析构函数。 在python3中,所有类最顶层父类都是object类,与java类似,如果定义类的时候没有写出父类,则object类就是其直接父类。 类定义 类定义语法格式如下: class ClassName: <statement-1
欠扁的小篮子
2018/04/11
9410
一文读懂面向对象(OOP)
面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一一调用则可。性能较高,所以单片机、嵌入式开发等一般采用面向过程开发。
编程识堂
2023/05/24
8190
一文读懂面向对象(OOP)
ES6中的对象与类
面向对象更贴近我们的实际生活,可以使用面向对象描述现实世界事物,但是事物分为具体的事物和抽象的事物
星辰_大海
2020/10/15
5640
ES6中的对象与类
相关推荐
通俗易懂PHP基础【10-类和对象(2)】
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验