내포된 클래스에 inner를 붙이면 자신을 둘러싼 외부 클래스의 현재 인스턴스에 접근할 수 있다.
class Person(val firstName: String, val familyName: String) { inner class Possession(val description: String) { fun showOwner() = println(fullName()) } private fun fullName() = "$firstName $familyName" } fun main() { val person = Person("John", "Doe") // Possession 생성자 호출 val wallet = person.Possession("Wallet") wallet.showOwner() // John Doe }
여기서 내부(inner)2 클래스 생성자를 호출할 때 person.Possession("Wallet")처럼 외부 클래스 인스턴스를 지정해야 한다는 점에 유의하라. 다른 멤버들과 마찬가지로 내부 클래스를 가리킬 때도 this를 생략할 수 있다.
class Person(val firstName: String, val familyName: String) {
inner class Possession(val description: String) {
fun showOwner() = println(fullName())
}
// this.Possession("Wallet")과 같음
val myWallet = Possession("Wallet")
fun fullName() = "$firstName $familyName"
}