형태만 내부에 존재할 뿐 외부 클래스의 내용을 공유 할 수 없는 별개의 클래스
외부 클래스 객체 안에서 사용되는 클래스이기 때문에 외부 클래스의 내용을 사용 할 수 있다.
혼자서 객체를 만들 수 없고 외부 클래스의 객체가 있어야만 사용가능하다.
class Outer {
var text = "Outer Class"
class Nested {
fun introduce() {
println("Nested Class")
}
}
inner class Inner {
var text = "Inner Class"
fun introduceInner() {
println(text)
}
fun introduceOuter() {
// outer, inner 클래스에 이믈이 같은 속성이 있다면 @Outer로 참조
println(this@Outer.text)
}
}
}
fun main() {
Outer.Nested().introduce()
val outerIns = Outer()
val innerIns = Outer().Inner()
innerIns.introduceInner()
innerIns.introduceOuter()
outerIns.text = "Changed Outer Class"
innerIns.introduceOuter()
}