网站首页 > 开源技术 正文
仓颉中同样支持使用 class 来实现面向对象编程
核心特性
- 引用类型:类是引用类型,赋值或传参时传递引用(多个变量指向同一对象)。
- 继承支持:支持单继承(通过 <: 符号),子类继承父类非私有成员。
- 抽象类:用 abstract 修饰,可包含抽象函数(无函数体),不可实例化。
- 密封类:用 sealed 修饰的抽象类,仅允许同包内的子类继承。
类定义与结构
以关键字 class 开头,后跟 class 的名字,接着是定义在一对花括号中的 class 定义体。class 定义体中可以定义一系列的成员变量、成员属性(参见属性)、静态初始化器、构造函数、成员函数和操作符函数。
class ClassName {
// 成员变量(实例/静态)
let width: Int64 // 实例变量
static let count: Int // 静态变量
// 构造函数
public init(w: Int64) {
this.width = w
}
// 成员函数
public func area() { ... }
// 终结器(垃圾回收时触发)
~init() { ... }
}
成员变量分为实例成员变量和静态成员变量:
- 静态成员变量:使用 static 修饰符修饰,没有静态初始化器时必须有初值,只能通过类型名访问。
- 实例成员变量:定义时可以不设置初值(但必须标注类型),也可以设置初值,只能通过对象(即类的实例)访问。
成员函数同样分为实例成员函数和静态成员函数(使用 static 修饰符修饰):
- 实例成员函数:只能通过对象访问,实例成员函数中可以访问静态成员变量以及静态成员函数。根据是否有函数体,实例成员函数又可以分为抽象成员函数和非抽象成员函数。
- 静态成员函数:只能通过 class 类型名访问,静态成员函数中不能访问实例成员变量,也不能调用实例成员函数。
关键函数
- 主构造函数:与类同名,有两种形式的形参:普通形参和成员变量形参(需要在参数名前加上 let 或 var)。
- 普通构造函数:init 开头,需初始化所有未赋值实例成员变量。一个类中可以定义多个普通构造函数,但它们必须构成重载。
- 终结器:~init(),用于资源清理(如释放内存),有严格使用限制。
- 静态初始化器:static init(),初始化所有静态成员变量,每个类最多一个。
- This 类型:代表当前类类型,用于成员函数返回类型(子类调用时返回子类类型)。
继承与多态
- 继承规则:父类需用 open 修饰才可被继承(抽象类总是可被继承的)。子类通过 super(args) 调用父类构造函数。在子类定义处通过 <: 指定其继承的父类,但要求父类必须是可继承的。仅支持单继承。
- 函数覆盖:覆盖实例函数:父类函数用 open,子类用 override。重定义静态函数:子类用 redef。
- 动态派发:子类对象赋值给父类变量时,调用方法按实际类型决定。
访问控制
- 修饰符:private(仅类内)→ internal(同包及子包,默认)→ protected(子类可见)→ public(全局)。
- 抽象函数:必须为 public 或 protected,不可 private。
与结构体(struct)的区别
特性 | 类(class) | 结构体(struct) |
类型 | 引用类型 | 值类型 |
继承 | 支持 | 不支持 |
赋值/传参行为 | 传递引用(共享对象) | 复制值(独立副本) |
猜你喜欢
- 2025-08-05 玩转西门子PLC?老王给你划重点!
- 2025-08-05 为什么学 ST?从 PLC 编程语言体系看懂 ST 的价值
- 2025-08-05 学习plc没设备咋入门?
- 2025-08-05 工业机器人想玩得6,就要懂些编程基础:介绍信号输入和输出
- 2025-08-05 炸裂!字节Coze开源,普通人5分钟变身AI大神?保姆级教程来了!
- 2025-08-05 C语言编程入门
- 2025-08-05 虚幻引擎入行,从零基础到上手需要几步?
- 2025-08-05 PLC-HMI编程之道
- 2025-08-05 还没明白单片机的原理就去学编程肯定不行,31页内容介绍单片机
- 2025-08-05 C#编程基础(看这一篇就够了)
你 发表评论:
欢迎- 08-05玩转西门子PLC?老王给你划重点!
- 08-05为什么学 ST?从 PLC 编程语言体系看懂 ST 的价值
- 08-05学习plc没设备咋入门?
- 08-05工业机器人想玩得6,就要懂些编程基础:介绍信号输入和输出
- 08-05炸裂!字节Coze开源,普通人5分钟变身AI大神?保姆级教程来了!
- 08-05C语言编程入门
- 08-05虚幻引擎入行,从零基础到上手需要几步?
- 08-05PLC-HMI编程之道
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)