华为仓颉语言初识:结构体 struct 和类 class 的异同
前言
华为仓颉语言是鸿蒙原生应用的一种新的编程语言,采用面向对象的编程思想,为开发者带来新的开发体验。不仅可以和 ArkTs 相互调用,更能提升应用程序的性能,更重要的是仓颉语言的特点结合了 java 和 C 的特点。对开发者来说比较容易上手学习,本篇文章主要是详细介绍仓颉语言中的结构体 struct 和类 class 的区别,建议点赞收藏!
结构体 Struct
仓颉中的结构体以 strcut 作为开头,后面跟着结构体的名称,并以花括号作为主体部分,struct 中可以定义一系列成员变量,成员属性,构造函数等。
从代码结构上来看,struct 整体结构与 java 中的类差不多,init 表示的函数为普通构造函数,除此之外 struct 还支持主构造函数。可以直接将成员属性定义在主构造函数中。
主构造函数的函数名称和 struct 名称一样。同时可以在主构造函数的参数列表中定义 struct 的成员变量。
struct 的成员访问修饰符除了常见的 public,protected,private 之外,还新增了一个 internal 修饰符,表示仅当前包季子包可以访问。这就意味着使用导包的方式引用有 internal 修饰的成员变量,无法访问该变量。
类 class
仓颉中的类和 Java 中的类差不多,学习起来比较简单,都是以 class 关键字定义的。
class 类支持单继承,多实现的特点,使用 open 修饰的类才可以被继承。同时也支持使用 abstract 修饰为抽象类,继承使用<:符号表示。
class 类支持普通构造函数的重载,有且只有一个静态初始化器,这点和 struct 完全相同。
class 类同样支持重写父类的方法。
class 类支持主构造函数。
抽象类还可以被 sealed 修饰,表示被修饰的类定义只能在本定义所在的包内被其他类继承。
不同点
结构体 struct 不支持继承,也不能被定义为抽象,而 class 类可以。
结构体的实例对象在赋值给另一个对象时,表示值传递而并不是像 class 类的引用传递。
总结
仓颉中的结构体 struct 和 class 类有很多相同之处,开发者需要注意使用场景以及两者之间的异同之处。特别需要注意结构体 struct 的实例赋值给另一个实例对象后,相当于实例对象的拷贝,两者之间的内存地址并不相同,不同的操作两者之间并不会互相影响,而 class 类和 java 中的类一样,都是表示引用传递,拥有相同的内存地址。
评论