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

前言

华为仓颉语言是鸿蒙原生应用的一种新的编程语言,采用面向对象的编程思想,为开发者带来新的开发体验。不仅可以和 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")
    }
    }

  2. 从代码结构上来看,struct 整体结构与 java 中的类差不多,init 表示的函数为普通构造函数,除此之外 struct 还支持主构造函数。可以直接将成员属性定义在主构造函数中。

    struct Person {
    pubilc Person(let name:String,let age:Int64){}
    public func speak(){
    println("Hello World")
    }
    }

  3. 主构造函数的函数名称和 struct 名称一样。同时可以在主构造函数的参数列表中定义 struct 的成员变量。

  4. 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")
    }
    }

  2. 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{

    }

  3. class 类支持普通构造函数的重载,有且只有一个静态初始化器,这点和 struct 完全相同。

  4. 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 仓颉")
    }

    }

  5. class 类支持主构造函数。

  6. 抽象类还可以被 sealed 修饰,表示被修饰的类定义只能在本定义所在的包内被其他类继承。

不同点

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

总结

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

相关推荐
wuyoula16 分钟前
全新多平台电商代付商城源码
开发语言·c++·ui·小程序·php源码
玖疯子17 分钟前
IT疑难杂症诊疗室:系统性故障排查指南
开发语言·php
码云数智-大飞18 分钟前
OpCache 原理深挖:从字节码缓存到预加载(Preloading)的实战配置
java·开发语言
isyangli_blog31 分钟前
华为企业级虚拟化解决方案
华为
说再见再也见不到39 分钟前
华为交换机QoS配置一条龙:从基础模型到MQC实战
华为·交换机·qos·端口限速
cany100042 分钟前
C++ -- 泛型编程
java·开发语言·c++
格林威1 小时前
面阵相机 vs 线阵相机:堡盟与海康相机选型差异全解析 附C++ 实战演示
开发语言·c++·人工智能·数码相机·计算机视觉·视觉检测·工业相机
Lanren的编程日记1 小时前
Flutter 鸿蒙应用快捷操作功能实战:快捷菜单+快捷手势+快捷键支持,打造高效操作体验
flutter·华为·harmonyos
memoryjs1 小时前
鸿蒙系统进一步学习(二):ArkUI底层原理揭秘
学习·华为·harmonyos
时空系1 小时前
第7篇功能——打造你的工具箱 python中文编程
开发语言·python·ai编程