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

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 华为仓颉语言是一种基于鸿蒙系统的新型编程语言,结合了Java和C的特点,支持与ArkTs互相调用,提升应用性能。本文详细对比了仓颉语言中结构体(struct)和类(class)的区别:struct不支持继承,赋值时为值传递;而class支持单继承、多实现,赋值时为引用传递。两者均支持构造函数及成员访问修饰符,但struct新增internal修饰符限制包内访问。开发者需根据实际需求选择合适的使用场景。

前言

华为仓颉语言是鸿蒙原生应用的一种新的编程语言,采用面向对象的编程思想,为开发者带来新的开发体验。不仅可以和 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 中的类一样,都是表示引用传递,拥有相同的内存地址。

目录
相关文章
|
Web App开发 弹性计算 编解码
最佳实践:如何扩展你的SRS并发能力?
当我们用SRS快速搭建了视频服务,业务也开始上线运行了,很快就会遇到一个问题:如何支持更多的人观看?如何支持更多的人推流?这本质上就是系统的水平扩展能力,SRS当然是支持的,而且有多种扩展的方法,这篇文章就就详细分析各种扩展的方案,以及各种方案的应用场景和优缺点。
3460 0
最佳实践:如何扩展你的SRS并发能力?
|
12月前
|
安全 API 开发者
鸿蒙NEXT-鸿蒙老版本迁移最新版本(API19,modelVersion5.1.1)
鸿蒙更新至API19,新增热更新支持、资源过滤、内存分析等功能。本文详解手动迁移步骤及上下文获取问题解决方案。
546 0
|
C++ 容器
vector容器-插入和删除c++
vector容器-插入和删除c++
603 0
|
JSON 缓存 程序员
玩转HarmonyOS NEXT网络请求:从新手到高手的实战秘籍
本文以通俗易懂的方式讲解了HarmonyOS网络请求的核心知识,从基础概念到实战技巧,再到进阶优化,帮助开发者快速上手。通过“点外卖”的类比,形象解释了HTTP请求方法(如GET、POST)和JSON数据格式的作用。同时,提供了封装工具类的示例代码,简化重复操作,并分享了常见问题的解决方法(如权限配置、参数格式、内存泄漏等)。最后,还探讨了如何通过拦截器、缓存机制和重试机制提升请求功能。无论你是新手还是进阶开发者,都能从中受益,快动手实现一个新闻App试试吧!
668 5
|
存储 开发者 容器
问题提解决:ERROR: Could not install packages due to an OSError: HTTPSConnectionPool(host=‘files.pythonhos
问题提解决:ERROR: Could not install packages due to an OSError: HTTPSConnectionPool(host=‘files.pythonhos
|
存储 SQL 关系型数据库
PolarDB-X 存储引擎核心技术 | Lizard 多级闪回
本文介绍了数据库闪回技术,这是一种允许用户恢复到过去某个时间点状态的功能,无需依赖传统备份。闪回技术在误操作修复、数据恢复演练、问题诊断及合规审计等场景下尤为重要。
890 54
|
消息中间件 Java Kafka
Golang 语言中 kafka 客户端库 sarama
Golang 语言中 kafka 客户端库 sarama
907 0
|
前端开发 JavaScript
探讨JavaScript实现类似弹幕的跑马灯效果
探讨JavaScript实现类似弹幕的跑马灯效果
1447 1
|
缓存 开发者 网络架构
ArkTS 函数方法基础:掌握核心编程概念
本文深入探讨了ArkTS中的函数和方法,涵盖函数声明、参数处理、返回类型、作用域、函数类型等内容,帮助开发者掌握ArkTS的核心编程概念。通过实例讲解可选参数、rest参数、默认参数等特性,并讨论函数在面向对象编程、性能优化和错误处理中的应用,助力开发者编写更健壮、可维护的代码。
1088 0