首頁 > 軟體

Android Kotlin全面詳細類使用語法學習指南

2022-06-23 18:01:12

前言

Kotlin被Google官方認為是Android開發的一級程式語言

今天,我將主要講解kotlin中的類的所有知識,主要內容包括如下:

1. 類的宣告 & 範例化

// 格式
class 類名(引數名1:引數型別,引數名2:引數型別...){
                // to do 
}
// 範例
class User(userName: String, age: Int){
               // to do 
}
// 範例化
// Kotlin沒有new關鍵字,所以直接建立類的範例(無參情況 & 有參):
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()
// 在設定預設值後,若不想用預設值可在建立範例時傳入引數
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是單繼承 = 只有一個父類別
  • 區別: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{}
// 方法體
// 介面中的方法可以有預設方法體,有預設方法體的方法可不重寫
// 區別於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
 */
// 使用:建立類時會自動建立以下方法:
//      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類語法的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com