Kotlin(四)類 普通類,構(gòu)造函數(shù),抽象類,內(nèi)部類等

一、類的聲明

1、關鍵字

聲明類的關鍵字為class

二、類的構(gòu)造函數(shù)

  • 在Kotlin中,允許有一個主構(gòu)造函數(shù)和多個二級構(gòu)造函數(shù)(次構(gòu)造函數(shù))。其中主構(gòu)造函數(shù)是類頭的一部分。
  • 關鍵字或者構(gòu)造函數(shù)名:constructor(參數(shù))
主構(gòu)造器

主構(gòu)造器中不能包含任何代碼,初始化代碼可以放在初始化代碼段中,初始化代碼段使用 init 關鍵字作為前綴。

class Person constructor(firstName: String) {
    init {
        println("FirstName is $firstName")
    }
}
次構(gòu)造函數(shù)

類也可以有二級構(gòu)造函數(shù),需要加前綴 constructor:

class Person { 
    constructor(parent: Person) {
        parent.children.add(this) 
    }
}

如果類有主構(gòu)造函數(shù),每個次構(gòu)造函數(shù)都要,或直接或間接通過另一個次構(gòu)造函數(shù)代理主構(gòu)造函數(shù)。在同一個類中代理另一個構(gòu)造函數(shù)使用 this 關鍵字:

class Person(val name: String) {
    constructor (name: String, age:Int) : this(name) {
        // 初始化...
    }
}

抽象類

抽象是面向?qū)ο缶幊痰奶卣髦?,類本身,或類中的部分成員,都可以聲明為abstract的。抽象成員在類中不存在具體的實現(xiàn)。
注意:無需對抽象類或抽象成員標注open注解。

open class Base {
    open fun f() {}
}

abstract class Derived : Base() {
    override abstract fun f()
}

嵌套類

嵌套類使用 Nested 關鍵字來表示。

class Outer {                  // 外部類
    private val bar: Int = 1
    class Nested {             // 嵌套類
        fun foo() = 2
    }
}

fun main(args: Array<String>) {
    val demo = Outer.Nested().foo() // 調(diào)用格式:外部類.嵌套類.嵌套類方法/屬性
    println(demo)    // == 2
}

內(nèi)部類

  • 內(nèi)部類使用 inner 關鍵字來表示。
  • 內(nèi)部類會帶有一個對外部類的對象的引用,所以內(nèi)部類可以訪問外部類成員屬性和成員函數(shù)。
class Outer {
    private val bar: Int = 1
    var v = "成員屬性"
    /**嵌套內(nèi)部類**/
    inner class Inner {
        fun foo() = bar  // 訪問外部類成員
        fun innerTest() {
            var o = this@Outer //獲取外部類的成員變量
            println("內(nèi)部類可以引用外部類的成員,例如:" + o.v)
        }
    }
}

fun main(args: Array<String>) {
    val demo = Outer().Inner().foo()
    println(demo) //   1
    val demo2 = Outer().Inner().innerTest()   
    println(demo2)   // 內(nèi)部類可以引用外部類的成員,例如:成員屬性
}

類的修飾符

類屬性修飾符,標示類本身特性。
abstract    // 抽象類  
final       // 類不可繼承,默認屬性
enum        // 枚舉類
open        // 類可繼承,類默認是final的
annotation  // 注解類
訪問權限修飾符
private    // 僅在同一個文件中可見
protected  // 同一個文件中或子類可見
public     // 所有調(diào)用的地方都可見
internal   // 同一個模塊中可見
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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