当前位置: 首页 > news >正文

华为仓颉语言初识:结构体struct和类class的异同

前言

华为仓颉语言是鸿蒙原生应用的一种新的编程语言,采用面向对象的编程思想,为开发者带来新的开发体验。不仅可以和 ArkTs 相互调用,更能提升应用程序的性能,更重要的是仓颉语言的特点结合了 java 和 C 的特点。对开发者来说比较容易上手学习,本篇文章主要是详细介绍仓颉语言中的结构体 struct 和类 class 的区别,建议点赞收藏!

结构体 Struct

  1. 仓颉中的结构体以 strcut 作为开头,后面跟着结构体的名称,并以花括号作为主体部分,struct 中可以定义一系列成员变量,成员属性,构造函数等。
struct Person {let name :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.age = age}public func speak(){println("Hello World")}
}
  1. 从代码结构上来看,struct 整体结构与 java 中的类差不多,init 表示的函数为普通构造函数,除此之外 struct 还支持主构造函数。可以直接将成员属性定义在主构造函数中。
struct Person {pubilc Person(let name:String,let age:Int64){}public func speak(){println("Hello World")}
}
  1. 主构造函数的函数名称和 struct 名称一样。同时可以在主构造函数的参数列表中定义 struct 的成员变量。
  2. struct 的成员访问修饰符除了常见的 public,protected,private 之外,还新增了一个 internal 修饰符,表示仅当前包季子包可以访问。这就意味着使用导包的方式引用有 internal 修饰的成员变量,无法访问该变量。

类 class

  1. 仓颉中的类和 Java 中的类差不多,学习起来比较简单,都是以 class 关键字定义的。
class Person {let name :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.age = age}public func speak(){println("Hello World")}
}
  1. class 类支持单继承,多实现的特点,使用 open 修饰的类才可以被继承。同时也支持使用abstract 修饰为抽象类,继承使用<:符号表示。
public open class Person {let name :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.age = age}public func speak(){println("Hello World")}
}
class Student <:Person{}
  1. class 类支持普通构造函数的重载,有且只有一个静态初始化器,这点和 struct 完全相同。
  2. class 类同样支持重写父类的方法。
public open class Person {let name :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.age = age}public func speak(){println("Hello World")}
}
class Student <:Person{public override func speak(){println("Hello 仓颉")}}
  1. class 类支持主构造函数。
  2. 抽象类还可以被 sealed 修饰,表示被修饰的类定义只能在本定义所在的包内被其他类继承。

不同点

  • 结构体 struct 不支持继承,也不能被定义为抽象,而 class 类可以。
  • 结构体的实例对象在赋值给另一个对象时,表示值传递而并不是像 class 类的引用传递。

总结

仓颉中的结构体struct和 class 类有很多相同之处,开发者需要注意使用场景以及两者之间的异同之处。特别需要注意结构体 struct 的实例赋值给另一个实例对象后,相当于实例对象的拷贝,两者之间的内存地址并不相同,不同的操作两者之间并不会互相影响,而 class 类和 java 中的类一样,都是表示引用传递,拥有相同的内存地址。

相关文章:

  • Unity 3D AssetBundle加密解密教程
  • ⭐️⭐️⭐️ 模拟题及答案 ⭐️⭐️⭐️ 大模型Clouder认证:RAG应用构建及优化
  • mysql索引优化(一)
  • YOLOv1 详解:单阶段目标检测算法的里程碑
  • LLM outputs.loss 返回什么
  • 鸿蒙OSUniApp 制作简单的页面跳转与参数传递功能#三方框架 #Uniapp
  • 将网页带格式转化为PDF
  • 【2025】harbor仓库搭建
  • ORM++ 封装实战指南:安全高效的 C++ MySQL 数据库操作
  • GO并发过高导致程序崩溃如何解决
  • React笔记-Ant Design X样本间对接智谱AI
  • ATT衰减器(Attenuator)介绍
  • 言语理解成语积累
  • 一根网线可以有两个ip地址吗?怎么实现
  • pyhton基础【5】循环
  • Nginx location匹配模式详解
  • Spring Boot 调优的 12 个关键节点
  • 高性能管线式HTTP请求
  • Flink Checkpoint SavePoint 深度剖析与工程实践
  • 2025年文件加密软件——数据保险箱,为您的文件上锁
  • 装修素材图片都从什么网站找/网站优化网站优化
  • 开发一个b2c网站有哪些困难/泉州百度广告
  • 网站建设述职报告/百度视频免费下载
  • 100m的光纤可以做网站吗/网络营销和网络销售的关系
  • 南京网站制作公司哪家靠谱/武汉企业网站推广
  • 营销网站开发找哪家/整合营销策略有哪些