Swift - 43 - 继承, 多态, 析构函数

import Foundation

/*
什么叫继承: 可以简单理解为一个类可以从它的父类或者基类中直接拿属性或者方法去使用
冒号":"表示两者之间的继承关系
*/
class Person
{
    /*- 属性 -*/
    var name: String = ""
    // 储存属性如果没有在创建的时候赋值, 就要在每一个构造方法中(初始化的时候)赋值
    var age: Int

    // 构造方法:每个类都有一个默认的构造方法
    // 一个对象创建完毕后, 都需要使用构造方法对其进行初始化, 也就是OC中的初始化方法
    // 对比其他方法, 没有func关键字
    // 没有返回值
    init()
    {
        // print("这是一个人的构造方法")
        // 注意, 在这个初始化方法中也要给age赋值
        self.age = 0
    }

    // 自定义构造方法
    init(name: String, age: Int)
    {
        self.name = name
        self.age = age
    }

    /*- 方法 -*/
    func sleep()
    {
        print("这个人在睡觉ingzzzzZZ...")
    }

    // 析构函数(相当于OC中的Dealloc), 用于释放对象资源
    // deinit的调用是在一个消息处理结束之后发生的。所谓消息处理就是指你的线程所对应的AutoreleasePool在该线程的runloop执行模式下,
    // 处理完一个指定的event,比如点击事件,定时器时间,网络传输事件等。所以,你这里设置为nil,该对象并不会真正去调用deinit方法。
    deinit
    {
        // print("这个人被释放掉了")
    }
}

class Man: Person {
    // override表示重写父类的方法
    // 默认初始化方法会自动调用父类的初始化方法
    override init() {
        super.init()
        // print("这是那个男人的构造方法")
    }

    deinit
    {
        // print("这个男人被释放掉了")
    }

    override func sleep() {
        print("那个男人在睡觉....")
    }
}

var man = Man()
// 使用父类的属性
man.name = "Rinpe"
// 使用父类的方法
//man.sleep()

/*--------------------------测试析构函数---------------------------*/

func f()
{
    let person  = Person()
    person.name = "某某"
}

f()

/*--------------------------测试析构函数---------------------------*/

/*--------------------------多态---------------------------*/

// 多态:父类指针指向子类对象
// 编译的时候是父类, 但真正使用的时候是子类
var personOne: Person = Man()
// 这里调用的其实是子类的方法
personOne.sleep()

func somebodyRun(person: Person)    // 这里参数定义的时候用的是父类
{
    print("\(person.name)正在跑动")
}

somebodyRun(man)        // 这里传参传的是子类

/*--------------------------多态---------------------------*/

  

时间: 2024-10-21 10:04:28

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

virtual 修饰符与继承对析构函数的影响(C++)

以前,知道了虚函数表的低效性之后,一直尽量避免使用之.所以,在最近的工程中,所有的析构函数都不是虚函数.今天趁着还书的机会到图书馆,还书之后在 TP 分类下闲逛,偶然读到一本游戏编程书,里面说建议将存在派生的类的析构函数都设置为 virtual.例如 ParentClass 和 ChildClass(派生自 ParentClass),如果 ParentClass 的 ~ParentClass() 不是 virtual 的话,以下代码会产生潜在的问题: 1 ParentClass *pClass

Swift的继承和结构体的初始化

/* Swift的继承 如果要重写父类的存储属性 1.重写后可以给它加属性观察器.列一: 2.可以把其改为计算属性(但不可减少父类属性原本的功能).列二: 3.父类的只读(只有get,或者let),子类不能添加属性观察器.列三: 如果重写父类的计算属性 1.父类计算属性只有只读,子类重写后可以给其加上seter方法.列四: 方法继承.列五: */ //列一: class Person { var name: String = "cj" } class Child:Person { ov

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

1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.List; 4 5 /** 6 * @title 接口继承多态的经典范例 7 * @author 作者:sunshine yaqingl 8 * @date 创建时间:2016年7月6日 下午5:27:39 9 */ 10 11 //使用Comparable接口自定义排序 12 class Employee implements Com

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

封装继承多态到底讲的是什么

封装继承多态到底讲的是什么 封装.继承.多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念.所以想要弄明白封装.继承.多态,首先就要先了解面向对象概念. 封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来.封装就是把一些特征或功能组合到一个抽象的对象上.就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等.功能有计算等.那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能.但这个“电脑”不是实物,它代表

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

java基础之【继承--->多态】内存图

执行流程 1:Animal a = new Cat(); 1.1:在栈中创建区域,类型为Animal,变量名:a; 1.2:在堆中new Cat();占用一块区域.地址值:[0x3a4] 1.3:spuer()实例化父类Animal. 1.3.1:new Animal();占用一块区域,地址值:0x3ab; 1.3.2:引用着在方法区中初始化[Animal中的所有方法,该引用为:[0x754]]. 1.3.3:将Animal()引用赋给spuer();spuer引用着Animal(); 1.4:

三大特性:封装,继承,多态

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. 三大特性是:封装,继承,多态 所谓封装: 也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体.在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问.通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对

关于Swift类继承的一点小问题

别人已经写过很多关于Swift类继承的文章,这里我只是为了补充一点菜鸟教程继承上没有明面说明的东西,菜鸟教程关于类继承的网站:http://www.runoob.com/swift/swift-inheritance.html 关于这个问题,另一篇博客也写了这个: http://blog.csdn.net/binglan520/article/details/52662815 父类里面所有的属性 在定义时可以不给出初始值,在init函数里面赋予值就行了,而子类的属性 在定义时必须给出初始值,不然