Kotlin學習之類與對象篇—嵌套類和內部類

嵌套類

kotlin嵌套類聲明如下:

class Outer {
    ... .. ...
    class Nested {
        ... .. ...
    }
}

嵌套類相當於外部類的一個成員,所以Outer可以用.符號來調用其嵌套類Nested以及Nested類裏面的成員。

一個嵌套類例子:

class Person{
    class Student{
        var sayHi = "hello! Nice to meet you!"
        fun sayHello() :String = sayHi
    }
}

//使用下面的代碼來調用嵌套類Student裏面的方法
var helloString = Person.Student().sayHello()
println(helloString)

kotlin中的嵌套類相當於Java的靜態內部類。在Java類中聲明一個類,這個類就默認成爲一個內部類。而Kotlin中的內部類必須使用inner修飾符來聲明。

內部類

kotlin內部類聲明如下:

class Outer {
    private val bar: Int = 1
    inner class Inner {
        fun foo() = bar
    }
}

kotlin內部類可以訪問外部類的成員,並且持有外部類的引用。

要訪問外部類,我們使用this@label,其中@label指明this的來源。

class Person{

    val hiString = "hello! I'm a human"

    inner class Student{
        val sayHi = "hello! Nice to meet you!"

        //this引用外部類
        var outerHi = this@Person.hiString
        //this自身引用
        var innerHi1 = this@Student.sayHi
        var innerHi2 = this.sayHi
    }

}

//在其它地方調用內部類的代碼
println(Person().Student().outerHi)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章