HarmonyOS5 仓颉入门:结构体 struct 和类 class 的异同
结构体 Struct
仓颉中的结构体以 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")
}
}
从代码结构上来看,struct 整体结构与 java 中的类差不多,init 表示的函数为普通构造函数,除此之外 struct 还支持主构造函数。可以直接将成员属性定义在主构造函数中。
struct Person {
pubilc Person(let name:String,let age:Int64){}
public func speak(){
println("Hello World")
}
}
主构造函数的函数名称和 struct 名称一样。同时可以在主构造函数的参数列表中定义 struct 的成员变量。
struct 的成员访问修饰符除了常见的 public,protected,private 之外,还新增了一个 internal 修饰符,表示仅当前包季子包可以访问。这就意味着使用导包的方式引用有 internal 修饰的成员变量,无法访问该变量。
类 class
仓颉中的类和 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")
}
}
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{
}
class 类支持普通构造函数的重载,有且只有一个静态初始化器,这点和 struct 完全相同。
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 仓颉")
}
}
class 类支持主构造函数。
抽象类还可以被 sealed 修饰,表示被修饰的类定义只能在本定义所在的包内被其他类继承。
不同点
结构体 struct 不支持继承,也不能被定义为抽象,而 class 类可以。
结构体的实例对象在赋值给另一个对象时,表示值传递而并不是像 class 类的引用传递。
总结
仓颉中的结构体 struct 和 class 类有很多相同之处,开发者需要注意使用场景以及两者之间的异同之处。特别需要注意结构体 struct 的实例赋值给另一个实例对象后,相当于实例对象的拷贝,两者之间的内存地址并不相同,不同的操作两者之间并不会互相影响,而 class 类和 java 中的类一样,都是表示引用传递,拥有相同的内存地址。
更多推荐



所有评论(0)