Kotlin:那些關(guān)于 類使用 的入門語法都在這里了!


前言

Kotlin被Google官方認(rèn)為是Android開發(fā)的一級(jí)編程語言


示意圖

今天,我將主要講解kotlin中的類的所有知識(shí),主要內(nèi)容包括如下:



1. 類的聲明 & 實(shí)例化

// 格式
class 類名(參數(shù)名1:參數(shù)類型,參數(shù)名2:參數(shù)類型...){
                // to do 
}

// 示例
class User(userName: String, age: Int){
               // to do 
}

// 實(shí)例化
// Kotlin沒有new關(guān)鍵字,所以直接創(chuàng)建類的實(shí)例(無參情況 & 有參):
var user = User()
var user = User("ABC" , 123)

// 額外說明:Kotlin支持默認(rèn)參數(shù)
// 即在調(diào)用函數(shù)時(shí)可不指定參數(shù),則使用默認(rèn)函數(shù)
class User(userName: String = "hjc", age: Int = 26){
              // to do 
}

// 在實(shí)例化類時(shí)不傳入?yún)?shù),userName默認(rèn) = hjc,age默認(rèn) = 26
var user = User()
// 在設(shè)置默認(rèn)值后,若不想用默認(rèn)值可在創(chuàng)建實(shí)例時(shí)傳入?yún)?shù)
var user = User("ABC" , 123)


// 注:命名參數(shù)
若一個(gè)默認(rèn)參數(shù)在一個(gè)無默認(rèn)值的參數(shù)前,那么該默認(rèn)值只能通過使用命名參數(shù)調(diào)用該函數(shù)來使用
class User(userName: String = "hjc", age: Int){
    // to do 
}
var user = User(age = 26)

對于構(gòu)造函數(shù),Kotlin中類可有一個(gè)主構(gòu)造函數(shù) & 多個(gè)次構(gòu)造函數(shù),下面將詳細(xì)說明。


2. 構(gòu)造函數(shù)

2.1 主構(gòu)造函數(shù)

  • 屬于類頭的一部分 = 跟在類名后,采用 constructor 關(guān)鍵字
  • 不能包含任何的代碼。初始化的代碼放到以 init 關(guān)鍵字作為前綴的代碼塊中
class 類名 constructor(參數(shù)名:參數(shù)類型){
    init {       
    //...
    }
}

// 示例
class User constructor(userName: String) {
    init {       
    //...
    }
}
// 注:若主構(gòu)造函數(shù)無任何注解 / 可見性修飾符,可省略 constructor 關(guān)鍵字
class 類名(參數(shù)名:參數(shù)類型){
    init {       
    //...
    }
}

// 示例
class User (userName: String) {
    init {       
    //...
    }
}

2.2 次構(gòu)造函數(shù)

  • 必須加constructor關(guān)鍵字
  • 一個(gè)類中可存在多個(gè)次構(gòu)造函數(shù),傳入?yún)?shù)不同
// 形式
constructor(參數(shù)名:參數(shù)類型) :{函數(shù)體}

// 示例
class User(userName: String) {
    // 主構(gòu)造函數(shù)
    init {
        println(userName)
    }

    // 次構(gòu)造函數(shù)1:可通過this調(diào)主構(gòu)造函數(shù)
    constructor() : this("hjc")

    // 次構(gòu)造函數(shù)2:可通過this調(diào)主構(gòu)造函數(shù)
    constructor(age: Int) : this("hjc") {
        println(age)
    }

    // 次構(gòu)造函數(shù)3:通過this調(diào)主構(gòu)造函數(shù)
    constructor(sex: String, age: Int) : this("hjc") {
        println("$sex$age")
    }
}

// 實(shí)例化類
User("hjc") // 調(diào)用主構(gòu)造函數(shù)
User()      // 調(diào)用次構(gòu)造函數(shù)1
User(2)     // 調(diào)用次構(gòu)造函數(shù)2
User("male",26) // 調(diào)用次構(gòu)造函數(shù)3

3. 類的屬性

Kotlin的類可以擁有屬性:關(guān)鍵字var(讀寫) / 關(guān)鍵字val(只讀)

class User {
    var userName: String
    val sex: String = "男"
}

// 使用屬性 = 名稱 + 引用
User().sex  // 使用該屬性 = Java的getter方法
User().userName = "hjc"  // 設(shè)置該屬性 = Java的setter方法

4. 可見性修飾符


5. 繼承 & 重寫

  • 類似于Java,Kotlin是單繼承 = 只有一個(gè)父類
  • 區(qū)別:Kotlin使用冒號(hào)“ : ”繼承 & 默認(rèn)不允許繼承(若想讓類可被繼承,需用open關(guān)鍵字來標(biāo)識(shí))
// 用open關(guān)鍵字標(biāo)識(shí)該類允許被繼承
open class Food 

// 類Fruits繼承類Food
class Fruits : Food()
  • 對于子類重寫父類的方法,在Kotlin中,方法也是默認(rèn)不可重寫的
  • 若子類要重寫父類中的方法,則需在父類的方法前面加open關(guān)鍵字,然后在子類重寫的方法前加override關(guān)鍵字
// 父類
// 在類 & 方法前都加了關(guān)鍵字open,為了被繼承 & 方法重寫
open class Food {
    open fun banana() {}
}

// 子類 
class Fruits : Food(){
    // 重寫了父類的方法
    override fun banana() {
        super.banana()
    }
}

6. 特殊類

下面將講解一些特殊的類:

  • 嵌套類(內(nèi)部類)
  • 接口
  • 數(shù)據(jù)類
  • 枚舉類

6.1 嵌套類(內(nèi)部類)

/**
 * 1. 嵌套類(內(nèi)部類)
 * 標(biāo)識(shí):關(guān)鍵字inner
 * 使用:通過外部類的實(shí)例調(diào)用嵌套類
 */
 class User {
    var age: Int = 0

    inner class UserName {
    }
}

var userName: User.UserName  = User().UserName()

6.2 接口

/**
 * 2. 接口
 * 標(biāo)識(shí):關(guān)鍵字interface
 */
// 聲明
interface A{}
interface B{}

// 方法體
// 接口中的方法可以有默認(rèn)方法體,有默認(rèn)方法體的方法可不重寫
// 區(qū)別于Java:Java不支持接口里的方法有方法體。
interface UserImpl{
    fun getName(): String // 無默認(rèn)方法體,必須重寫
    fun getAge(): Int{    // 有默認(rèn)方法體,可不重寫
        return 22
    }
}
// 實(shí)現(xiàn)接口UserImpl:需重寫getName() & 可不重寫getAge()
class User :UserImpl{
    override fun getName(): String {
        return "hjc"
    }
}

// 實(shí)現(xiàn)接口:冒號(hào):
class Food : A, B {} // Kotlin是多實(shí)現(xiàn)
class Fruits: Food,A, B {} // 繼承 + 實(shí)現(xiàn)接口

6.3 數(shù)據(jù)類

 /**
  * 3. 數(shù)據(jù)類
  * 作用:保存數(shù)據(jù)
  * 標(biāo)識(shí):關(guān)鍵字data
 */
// 使用:創(chuàng)建類時(shí)會(huì)自動(dòng)創(chuàng)建以下方法:
//      1. getter/setter方法;
//      2. equals() / hashCode() 對;
//      3. toString() :輸出"類名(參數(shù)+參數(shù)值)";
//      4. copy() 函數(shù):復(fù)制一個(gè)對象&改變它的一些屬性,但其余部分保持不變

// 示例:
// 聲明1個(gè)數(shù)據(jù)類
data class User(var userName: String, var age: Int)
// copy函數(shù)使用
var user = User("hjc",26)
var user1 = user.copy(age = 30)
// 輸出user1.toString(),結(jié)果是:User(userName=hjc,age=30)

// 特別注意
// 1. 主構(gòu)造方法至少要有一個(gè)參數(shù),且參數(shù)必須標(biāo)記為val或var
// 2. 數(shù)據(jù)類不能用open、abstract、sealed(封閉類)、inner標(biāo)識(shí)

6.4 枚舉類

/**
 * 4. 枚舉類
 * 標(biāo)識(shí):關(guān)鍵字enum
 */
 // 定義
 enum class Color {
    RED, GREEN, BLUE
}

// 為枚舉類指定值
enum class Color(rgb: Int) {
    RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF)
}

至此,關(guān)于kotlin入門語法中的類使用講解完畢。


總結(jié)

  • 本文全面介紹了Kotlin入門語法中的類
  • 接下來推出的文章,我將繼續(xù)講解Kotlin的相關(guān)知識(shí),包括使用、語法特點(diǎn)等,感興趣的讀者可以繼續(xù)關(guān)注我的博客哦:Carson_Ho的Android博客

請點(diǎn)贊!因?yàn)槟銈兊馁澩?鼓勵(lì)是我寫作的最大動(dòng)力!

相關(guān)文章閱讀
Android開發(fā):最全面、最易懂的Android屏幕適配解決方案
Android開發(fā):史上最全的Android消息推送解決方案
Android開發(fā):最全面、最易懂的Webview詳解
Android開發(fā):JSON簡介及最全面解析方法!
Android四大組件:Service服務(wù)史上最全面解析
Android四大組件:BroadcastReceiver史上最全面解析


歡迎關(guān)注Carson_Ho的簡書!

不定期分享關(guān)于安卓開發(fā)的干貨,追求短、平、快,但卻不缺深度。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容