클래스 내부에 자식 클래스를 가질 수 있다.
중첩클래스와 inner 클래스가 그것이다.
중첩클래스는 단순히 namespace 와 비슷하게 static 으로 내부에 존재하는 클래스이고
inner 클래스는 부모클래스를 인스턴스화 한 상태에서 접근 가능하며 부모의 변수를 참조할 수 있다.
사용예
[code]
fun main() {
Outer.Nested().introduce()
// 에러: inner 클래스는 부모클래스 인스턴스 없이 접근할 수 없다
// Outer.Inner().introduceInner()
val outer = Outer()
val inner = outer.Inner()
inner.introduceInner()
inner.introduceOuter()
outer.text = “Changed Outer class”
inner.introduceOuter()
}
class Outer {
var text = “Outer Class”
// 중첩클래스
class Nested {
fun introduce() {
println(“Nested Class”)
}
}
// 내부클래스
inner class Inner {
var text = “Innter Class”
fun introduceInner() {
println(text)
}
fun introduceOuter() {
println([email protected]) // 부모 클래스에 접근하는 방법
}
}
}
[/code]
결과
[code]
Nested Class
Innter Class
Outer Class
Changed Outer class
[/code]