前言
華為倉頡語言是鴻蒙原生應用的一種新的編程語言,采用面向對象的編程思想,為開發者帶來新的開發體驗。不僅可以和 ArkTs 相互調用,更能提升應用程序的性能,更重要的是倉頡語言的特點結合了 java 和 C 的特點。對開發者來說比較容易上手學習,本篇文章主要是詳細介紹倉頡語言中的結構體 struct 和類 class 的區別,建議點贊收藏!
結構體 Struct
- 倉頡中的結構體以 strcut 作為開頭,后面跟著結構體的名稱,并以花括號作為主體部分,struct 中可以定義一系列成員變量,成員屬性,構造函數等。
struct Person {let name :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.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 :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.age = age}public func speak(){println("Hello World")}
}
- class 類支持單繼承,多實現的特點,使用 open 修飾的類才可以被繼承。同時也支持使用abstract 修飾為抽象類,繼承使用<:符號表示。
public open class Person {let name :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.age = age}public func speak(){println("Hello World")}
}
class Student <:Person{}
- class 類支持普通構造函數的重載,有且只有一個靜態初始化器,這點和 struct 完全相同。
- class 類同樣支持重寫父類的方法。
public open class Person {let name :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.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 中的類一樣,都是表示引用傳遞,擁有相同的內存地址。