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

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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)        // 这里传参传的是子类
 
/*--------------------------多态---------------------------*/

  

posted @   Rinpe  阅读(291)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
· 程序员常用高效实用工具推荐,办公效率提升利器!
点击右上角即可分享
微信分享提示