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

news2025/5/29 9:45:25

前言

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

结构体 Struct

  1. 仓颉中的结构体以 strcut 作为开头,后面跟着结构体的名称,并以花括号作为主体部分,struct 中可以定义一系列成员变量,成员属性,构造函数等。
struct Person {
  let name :String
  let age:Int64

  pubilc init(name:String,age:Int64){
    this.name = name
    this.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 :String
  let age:Int64

  pubilc init(name:String,age:Int64){
    this.name = name
    this.age = age
  }
  public func speak(){
    println("Hello World")
  }
}
  1. class 类支持单继承,多实现的特点,使用 open 修饰的类才可以被继承。同时也支持使用abstract 修饰为抽象类,继承使用<:符号表示。
public open class Person {
  let name :String
  let age:Int64

  pubilc init(name:String,age:Int64){
    this.name = name
    this.age = age
  }
  public func speak(){
    println("Hello World")
  }
}
class Student <:Person{
  
}

  1. class 类支持普通构造函数的重载,有且只有一个静态初始化器,这点和 struct 完全相同。
  2. class 类同样支持重写父类的方法。
public open class Person {
  let name :String
  let age:Int64

  pubilc init(name:String,age:Int64){
    this.name = name
    this.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 中的类一样,都是表示引用传递,拥有相同的内存地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2387287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据仓库基础知识总结

1、什么是数据仓库&#xff1f; 权威定义&#xff1a;数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。 1&#xff09;数据仓库是用于支持决策、面向分析型数据处理&#xff1b; 2&#xff09;对多个异构的数据源有效集…

vue2使用element中多选组件el-checkbox-group,数据与UI更新不同步

问题描述 使用element多选checkbox组件&#xff0c;点击勾选取消勾选&#xff0c;视图未变化&#xff0c;再次点击表单其他元素&#xff0c;多选组件勾选状态发生变化&#xff0c;视图和数据未同步 第一次尝试&#xff1a;再el-checkbox-group多选父组件上增加点击事件&…

linux磁盘分区及挂载、fdisk命令详解

文章目录 1.Linux磁盘分区概念精要‌1.1 分区的定义‌1.2 多分区的必要性‌1.2.1 数据安全隔离‌1.2.2 提升存储效率‌1.2.3 防止系统资源耗尽‌1.2.4 fdisk用法介绍 2.服务器挂载磁盘实战详细步骤2.1检查磁盘情况及格式化2.2磁盘分区2.3 磁盘目录挂载2.3.1 创建挂载目录2.3.2 …

Eigen矩阵存储顺序以及转换

一、Eigen矩阵存储顺序 在矩阵运算和线性代数中,"行优先"(Row-major)和"列优先"(Column-major)是两种不同的存储方式,它们决定了多维数组(如矩阵)在内存中的布局顺序。 1. 行优先(Row-major) 定义:矩阵按行顺序存储在内存中,即第一行的所有元…

2025蓝桥杯WP

引言 在2025年蓝桥杯网络安全赛道中&#xff0c;我们面对涵盖Web安全、逆向工程、PWN、取证分析以及加密解密等多领域的挑战&#xff0c;要求选手具备扎实且全面的安全技术与实战能力。本文将以实战记录的形式&#xff0c;逐题详细还原解题思路与操作步骤&#xff0c;并配以相…

数字人教师:开启教育智慧革新之旅

在科技浪潮的推动下&#xff0c;教育领域正经历一场由数字人教师引领的深刻变革&#xff0c;这不仅是技术与教育融合的创新实践&#xff0c;更是教育模式重塑的关键路径。 一、数字人教师的崛起&#xff1a;教育变革的必然选择 随着互联网、大数据、人工智能等前沿技术的飞速…

详解srs流媒体服务器的集群

前言&#xff1a; 什么是集群 集群就是多台计算机或服务器等资源&#xff0c;联在一起像一台大机器一样工作。比如一群蚂蚁一起搬东西&#xff0c;这些蚂蚁就类似集群里的各个部分。 为什么要集群 性能更强&#xff1a;能把任务分到多个机器上做&#xff0c;一起处理更快&…

ubuntu22.04 安装 SecureCRT8.7.3

用到的全部软件&#xff0c;都放在这个网盘里面了&#xff0c;自取。 链接: https://pan.baidu.com/s/1AR6Lj8FS7bokMR5IrLmsIw?pwd3dzv 提取码: 3dzv 如果链接失效了&#xff0c;关注公号&#xff1a;每日早参&#xff0c;回复&#xff1a;资源&#xff0c;即可免费获取&…

libvirt设置虚拟机mtu实现原理

背景 云计算场景下,可以动态调整虚拟机mtu,提高虚拟机网络性能。设置虚拟机(VM)virtio网卡的MTU(Maximum Transmission Unit)涉及 ​​宿主机(Host)、QEMU/KVM、vhost-net后端​​ 和 ​​虚拟机内部的virtio驱动​​之间的协作。 原理分析 1.libvirt设置mtu分析 libv…

AstroNex空间任务智能控制研究与训练数据集

数据集概述 AstroNex空间任务智能控制研究与训练数据集是朗迪锋科技基于Multiverse平台精心打造的首个全面覆盖航天器智能控制全周期的综合数据集产品。该数据集汇集了轨道动力学、姿态控制、机器视觉、环境感知等多维度数据&#xff0c;为航天器智能算法研发提供丰富的训练与…

汽车副水箱液位传感器介绍

汽车副水箱液位传感器是现代车辆冷却系统中不可或缺的关键部件,其核心功能在于实时监测冷却液存量,确保发动机在最佳温度范围内稳定运行。随着汽车电子化程度不断提升,这一看似简单的传感器已发展成为集机械、电子、材料技术于一体的精密装置,其工作原理与技术演进值得深入…

IEEE出版|2025年智能制造、机器人与自动化国际学术会议 (IMRA2025)

【重要信息】 会议官网&#xff1a;www.icimra.com 会议时间: 2025年11月14日-16日 会议地点: 中国湛江 截稿日期&#xff1a;2025年09月16日(一轮截稿) 接收或拒收通知&#xff1a;文章投递后5-7个工作日 会议提交检索&#xff1a;EI Compendex, Scopus IEEE出版|2025年…

EasyRTC嵌入式SDK音视频实时通话助力WebRTC技术与智能硬件协同发展

一、概述 在万物互联的数字化浪潮下&#xff0c;智能硬件已广泛渗透生活与工业领域&#xff0c;实时音视频通信成为智能硬件实现高效交互的核心需求。WebRTC作为开源实时通信技术&#xff0c;为浏览器与移动应用提供免插件的音视频通信能力&#xff0c;而EasyRTC通过深度优化音…

Higress MCP Server 安全再升级:API 认证为 AI 连接保驾护航

Higress MCP Server 安全再升级&#xff1a;API 认证为 AI 连接保驾护航 Higress 作为一款强大的 AI 原生 API 网关&#xff0c;致力于铺设 AI 与现实世界之间最短、最安全、最具成本效益的连接路径。其核心能力之一便是支持将现有的 OpenAPI 规范无缝转换为 MCP Server&#…

多模态理解大模型高性能优化丨前沿多模态模型开发与应用实战第七期

一、引言 在前序课程中&#xff0c;我们系统剖析了多模态理解大模型&#xff08;Qwen2.5-VL、DeepSeek-VL2&#xff09;的架构设计。鉴于此类模型训练需消耗千卡级算力与TB级数据&#xff0c;实际应用中绝大多数的用户场景均围绕推理部署展开&#xff0c;模型推理的效率影响着…

人脸识别技术合规备案最新政策详解

《人脸识别技术应用安全管理办法》将于2025年6月1日正式实施&#xff0c;该办法从技术应用、个人信息保护、技术替代、监管体系四方面构建了人脸识别技术的治理框架&#xff0c;旨在平衡技术发展与安全风险。 一、明确技术应用的边界 公共场所使用限制&#xff1a;仅在“维护公…

AStar低代码平台-脚本调用C#方法

修改报工表表单&#xff0c;右键定义弹出菜单&#xff0c;新增一个菜单项&#xff0c;并在点击事件脚本中编写调用脚本。 编译脚本&#xff0c;然后在模块代码里面定义这个方法&#xff1a; public async Task<int> on_call_import(DataRow curRow) {PrintDataRow(cur…

企业级RAG技术实战指南:从理论到落地的全景解析

前言 在大模型技术日新月异的今天&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术正成为企业突破AI应用瓶颈的关键利器。当传统AI系统还在处理结构化数据的泥潭中挣扎时&#xff0c;RAG技术已经打开了通向非结构化知识海洋的大门。这本《RAG技术实战指南》以独特的工…

【八股战神篇】RabbitMQ高频面试题

简述RabbitMQ五种模式 &#xff1f; 延伸 请介绍一下RabbitMQ的特点 延伸 简述RabbitMQ的发布与订阅模式 延伸 RabbitMQ 如何保证消息不丢失&#xff1f; 延伸 RabbitMQ 如何保证消息有序&#xff1f; 延伸 专栏简介 八股战神篇专栏是基于各平台共上千篇面经&#xf…

高阶数据结构——红黑树实现

目录 1.红黑树的概念 1.1 红黑树的规则&#xff1a; 1.2 红黑树的效率 2.红黑树的实现 2.1 红黑树的结构 2.2 红黑树的插入 2.2.1 不旋转只变色&#xff08;无论c是p的左还是右&#xff0c;p是g的左还是右&#xff0c;都是一样的变色处理方式&#xff09; 2.2.2 单旋变色…