1. import Foundation
  2.  
  3. /*
  4. 什么叫继承: 可以简单理解为一个类可以从它的父类或者基类中直接拿属性或者方法去使用
  5. 冒号":"表示两者之间的继承关系
  6. */
  7. class Person
  8. {
  9. /*- 属性 -*/
  10. var name: String = ""
  11. // 储存属性如果没有在创建的时候赋值, 就要在每一个构造方法中(初始化的时候)赋值
  12. var age: Int
  13.  
  14. // 构造方法:每个类都有一个默认的构造方法
  15. // 一个对象创建完毕后, 都需要使用构造方法对其进行初始化, 也就是OC中的初始化方法
  16. // 对比其他方法, 没有func关键字
  17. // 没有返回值
  18. init()
  19. {
  20. // print("这是一个人的构造方法")
  21. // 注意, 在这个初始化方法中也要给age赋值
  22. self.age = 0
  23. }
  24.  
  25. // 自定义构造方法
  26. init(name: String, age: Int)
  27. {
  28. self.name = name
  29. self.age = age
  30. }
  31.  
  32. /*- 方法 -*/
  33. func sleep()
  34. {
  35. print("这个人在睡觉ingzzzzZZ...")
  36. }
  37.  
  38. // 析构函数(相当于OC中的Dealloc), 用于释放对象资源
  39. // deinit的调用是在一个消息处理结束之后发生的。所谓消息处理就是指你的线程所对应的AutoreleasePool在该线程的runloop执行模式下,
  40. // 处理完一个指定的event,比如点击事件,定时器时间,网络传输事件等。所以,你这里设置为nil,该对象并不会真正去调用deinit方法。
  41. deinit
  42. {
  43. // print("这个人被释放掉了")
  44. }
  45. }
  46.  
  47. class Man: Person {
  48. // override表示重写父类的方法
  49. // 默认初始化方法会自动调用父类的初始化方法
  50. override init() {
  51. super.init()
  52. // print("这是那个男人的构造方法")
  53. }
  54.  
  55. deinit
  56. {
  57. // print("这个男人被释放掉了")
  58. }
  59.  
  60. override func sleep() {
  61. print("那个男人在睡觉....")
  62. }
  63. }
  64.  
  65. var man = Man()
  66. // 使用父类的属性
  67. man.name = "Rinpe"
  68. // 使用父类的方法
  69. //man.sleep()
  70.  
  71. /*--------------------------测试析构函数---------------------------*/
  72.  
  73. func f()
  74. {
  75. let person = Person()
  76. person.name = "某某"
  77. }
  78.  
  79. f()
  80.  
  81. /*--------------------------测试析构函数---------------------------*/
  82.  
  83. /*--------------------------多态---------------------------*/
  84.  
  85. // 多态:父类指针指向子类对象
  86. // 编译的时候是父类, 但真正使用的时候是子类
  87. var personOne: Person = Man()
  88. // 这里调用的其实是子类的方法
  89. personOne.sleep()
  90.  
  91. func somebodyRun(person: Person) // 这里参数定义的时候用的是父类
  92. {
  93. print("\(person.name)正在跑动")
  94. }
  95.  
  96. somebodyRun(man) // 这里传参传的是子类
  97.  
  98. /*--------------------------多态---------------------------*/

  

Swift - 43 - 继承, 多态, 析构函数的更多相关文章

  1. Python设计模式 - 基础 - 封装 & 继承 & 多态

    面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...

  2. Java基础——面向对象(封装——继承——多态 )

    对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...

  3. Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2.  ...

  4. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  5. 浅谈学习C++时用到的【封装继承多态】三个概念

    封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...

  6. No2_4.接口继承多态_Java学习笔记_经典案例

    import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import jav ...

  7. Java继承多态中的方法访问权限控制

    java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...

  8. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  9. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

随机推荐

  1. SQL Server 触发器(转)

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删 ...

  2. Redis同步(主从复制)

    目录1.Replication的工作原理2.如何配置Redis主从复制3.应用示例 1.Replication的工作原理在Slave启动并连接到Master之后,它将主动发送一条SYNC命令.此后Ma ...

  3. WordPress社会化评论插件多说、有言、灯鹭、评论啦

    社会化登录是指网站的用户通过使用QQ.人人网.腾讯微博.新浪微博等社会化媒体账号登录该网站,并让用户能够使用社会化媒体账号进行允许的操作,如评论.分享等.经过简单的代码整合,社会化媒体账号可以在第三方 ...

  4. js本地存储解决方案(localStorage与userData)

    WEB应用的快速发展,是的本地存储一些数据也成为一种重要的需求,实现的方案也有很多,最普通的就是cookie了,大家也经常都用,但是cookie的缺点是显而易见的,其他的方案比如:IE6以上的user ...

  5. 【创建型】Builder模式

    生成器模式的主要思想:将产品对象的创建与表现分离开,并且同样的创建过程可以有不同的产品表现. 直白一点可以理解为:待创建的对象是复杂的,一般情况下是需要经过多个步骤的创建后,最终才能将完整产品创建好, ...

  6. twisted(3)--再谈twisted

    上一章,我们直接写了一个小例子来从整体讲述twisted运行的大致过程,今天我们首先深入一些概念,在逐渐明白这些概念以后,我们会修改昨天写的例子. 先看下面一张图: 这个系列的第一篇文章,我们已经为大 ...

  7. 浅谈JavaScript浮点数及其运算

    原文:浅谈JavaScript浮点数及其运算     JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题 ...

  8. android中对线程池的理解与使用

    前段时间有幸接到腾讯上海分公司的 Android开发面试,虽然最后一轮被毙了.但还是得总结一下自己在android开发中的一些盲点,最让我尴尬的是面试官问我几个android中线程池的使用与理解..哎 ...

  9. Filter Conditions 过滤条件

    <pre name="code" class="html">Filter Conditions 过滤条件: Rsyslog 提供4种不同类型的&qu ...

  10. CPU天梯图

    一幅图,了解CPU