중첩된 클래스
•
클래스는 다른 클래스에 중첩될 수 있다.
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2
Kotlin
복사
•
중첩된 인터페이스를 사용할 수도 있다.
•
클래스와 인터페이스의 모든 조합이 가능하다.
•
클래스에 인터페이스를 중첩하고 인터페이스에 클래스를 중첩하고 인터페이스에 인터페이스를 중첩할 수 있다.
interface OuterInterface {
class InnerClass
interface InnerInterface
}
class OuterClass {
class InnerClass
interface InnerInterface
}
Kotlin
복사
내부 클래스
•
inner로 표시된 중첩 클래스는 외부 클래스의 멤버에 접근할 수 있다.
•
내부 클래스는 외부 클래스의 객체에 대한 참조를 전달한다.
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo() // == 1
Kotlin
복사
•
내부 클래스에서의 모호성을 해소하려면 this 표현식을 사용한다.
익명의 내부 클래스
•
익명의 내부 클래스 인스턴스는 객체 표현식을 사용하여 생성된다.
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) { ... }
override fun mouseEntered(e: MouseEvent) { ... }
})
Kotlin
복사