嵌套類
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)