Android?Kotlin全面詳細類使用語法學習指南
前言
Kotlin被Google官方認為是Android開發(fā)的一級編程語言
今天,我將主要講解kotlin中的類的所有知識,主要內容包括如下:
1. 類的聲明 & 實例化
// 格式 class 類名(參數名1:參數類型,參數名2:參數類型...){ // to do } // 示例 class User(userName: String, age: Int){ // to do } // 實例化 // Kotlin沒有new關鍵字,所以直接創(chuàng)建類的實例(無參情況 & 有參): var user = User() var user = User("ABC" , 123) // 額外說明:Kotlin支持默認參數 // 即在調用函數時可不指定參數,則使用默認函數 class User(userName: String = "hjc", age: Int = 26){ // to do } // 在實例化類時不傳入參數,userName默認 = hjc,age默認 = 26 var user = User() // 在設置默認值后,若不想用默認值可在創(chuàng)建實例時傳入參數 var user = User("ABC" , 123) // 注:命名參數 若一個默認參數在一個無默認值的參數前,那么該默認值只能通過使用命名參數調用該函數來使用 class User(userName: String = "hjc", age: Int){ // to do } var user = User(age = 26)
對于構造函數,Kotlin中類可有一個主構造函數 & 多個次構造函數,下面將詳細說明。
2. 構造函數
2.1 主構造函數
- 屬于類頭的一部分 = 跟在類名后,采用 constructor 關鍵字
- 不能包含任何的代碼。初始化的代碼放到以 init 關鍵字作為前綴的代碼塊中
class 類名 constructor(參數名:參數類型){ init { //... } } // 示例 class User constructor(userName: String) { init { //... } } // 注:若主構造函數無任何注解 / 可見性修飾符,可省略 constructor 關鍵字 class 類名(參數名:參數類型){ init { //... } } // 示例 class User (userName: String) { init { //... } }
2.2 次構造函數
- 必須加constructor關鍵字
- 一個類中可存在多個次構造函數,傳入參數不同
// 形式 constructor(參數名:參數類型) :{函數體} // 示例 class User(userName: String) { // 主構造函數 init { println(userName) } // 次構造函數1:可通過this調主構造函數 constructor() : this("hjc") // 次構造函數2:可通過this調主構造函數 constructor(age: Int) : this("hjc") { println(age) } // 次構造函數3:通過this調主構造函數 constructor(sex: String, age: Int) : this("hjc") { println("$sex$age") } } // 實例化類 User("hjc") // 調用主構造函數 User() // 調用次構造函數1 User(2) // 調用次構造函數2 User("male",26) // 調用次構造函數3
3. 類的屬性
Kotlin的類可以擁有屬性:關鍵字var(讀寫) / 關鍵字val(只讀)
class User { var userName: String val sex: String = "男" } // 使用屬性 = 名稱 + 引用 User().sex // 使用該屬性 = Java的getter方法 User().userName = "hjc" // 設置該屬性 = Java的setter方法
4. 可見性修飾符
5. 繼承 & 重寫
- 類似于Java,Kotlin是單繼承 = 只有一個父類
- 區(qū)別:Kotlin使用冒號“ : ”繼承 & 默認不允許繼承(若想讓類可被繼承,需用open關鍵字來標識)
// 用open關鍵字標識該類允許被繼承 open class Food // 類Fruits繼承類Food class Fruits : Food()
- 對于子類重寫父類的方法,在Kotlin中,方法也是默認不可重寫的
- 若子類要重寫父類中的方法,則需在父類的方法前面加open關鍵字,然后在子類重寫的方法前加override關鍵字
// 父類 // 在類 & 方法前都加了關鍵字open,為了被繼承 & 方法重寫 open class Food { open fun banana() {} } // 子類 class Fruits : Food(){ // 重寫了父類的方法 override fun banana() { super.banana() } }
6. 特殊類
下面將講解一些特殊的類:
- 嵌套類(內部類)
- 接口
- 數據類
- 枚舉類
6.1 嵌套類(內部類)
/** * 1. 嵌套類(內部類) * 標識:關鍵字inner * 使用:通過外部類的實例調用嵌套類 */ class User { var age: Int = 0 inner class UserName { } } var userName: User.UserName = User().UserName()
6.2 接口
/** * 2. 接口 * 標識:關鍵字interface */ // 聲明 interface A{} interface B{} // 方法體 // 接口中的方法可以有默認方法體,有默認方法體的方法可不重寫 // 區(qū)別于Java:Java不支持接口里的方法有方法體。 interface UserImpl{ fun getName(): String // 無默認方法體,必須重寫 fun getAge(): Int{ // 有默認方法體,可不重寫 return 22 } } // 實現接口UserImpl:需重寫getName() & 可不重寫getAge() class User :UserImpl{ override fun getName(): String { return "hjc" } } // 實現接口:冒號: class Food : A, B {} // Kotlin是多實現 class Fruits: Food,A, B {} // 繼承 + 實現接口
6.3 數據類
/** * 3. 數據類 * 作用:保存數據 * 標識:關鍵字data */ // 使用:創(chuàng)建類時會自動創(chuàng)建以下方法: // 1. getter/setter方法; // 2. equals() / hashCode() 對; // 3. toString() :輸出"類名(參數+參數值)"; // 4. copy() 函數:復制一個對象&改變它的一些屬性,但其余部分保持不變 // 示例: // 聲明1個數據類 data class User(var userName: String, var age: Int) // copy函數使用 var user = User("hjc",26) var user1 = user.copy(age = 30) // 輸出user1.toString(),結果是:User(userName=hjc,age=30) // 特別注意 // 1. 主構造方法至少要有一個參數,且參數必須標記為val或var // 2. 數據類不能用open、abstract、sealed(封閉類)、inner標識
6.4 枚舉類
/** * 4. 枚舉類 * 標識:關鍵字enum */ // 定義 enum class Color { RED, GREEN, BLUE } // 為枚舉類指定值 enum class Color(rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF) }
總結
本文全面介紹了Kotlin語法中的類,更多關于Android Kotlin類語法的資料請關注腳本之家其它相關文章!
相關文章
Core Animation一些Demo總結 (動態(tài)切換圖片、大轉盤、圖片折疊、進度條等動畫效果)
這篇文章主要介紹了Core Animation一些Demo總結 (動態(tài)切換圖片、大轉盤、圖片折疊、進度條等動畫效果)的相關資料,需要的朋友可以參考下2016-02-02Android使用setCustomTitle()方法自定義對話框標題
Android有自帶的對話框標題,但是不太美觀,如果要給彈出的對話框設置一個自定義的標題,使用AlertDialog.Builder的setCustomTitle()方法非常方便,接下來通過本文給大家介紹Android使用setCustomTitle()方法自定義對話框標題,感興趣的朋友一起學習吧2016-02-02ListView實現下拉刷新加載更多的實例代碼(直接拿來用)
這篇文章主要介紹了ListView實現下拉刷新加載更多的實例代碼(直接拿來用)的相關資料,需要的朋友可以參考下2016-07-07Android布局ConstraintLayout代碼修改約束及輔助功能
這篇文章主要為大家介紹了Android布局ConstraintLayout代碼修改約束及輔助功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09