[Kotlin] 3-8. 중첩 클래스와 내부 클래스
중첩 클래스와 내부 클래스
다른 클래스에 클래스를 중첩할 수 있다
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2
내부 클래스
inner로 지정한 클래스는 외부 클래스의 멤버에 접근할 수 있다
내부 클래스는 외부 클래스의 객체에 대한 레퍼런스 갖는다
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo() // == 1
내부 클래스에서 this에 대한 모하함에 대한 것은 한정된 this식을 참고한다
익명 내부 클래스
오브젝트 식을 사용해서 익명 내부 클래스를 생성할 수 있다
window.addMoustListener(object: MouseAdapter() {
override fun mouseClicked(e: MoustEvent) {
// ...
}
override fun mouseEntered(e: MouseEvent) {
// ...
}
})
객체가 함수형 자바 인터페이스의 인스턴스라면, 인터페이스 타입을 접두어로 갖는 람다 식을 사용해서
익명 내부 객체를 생성할 수 있다
val listener = ActionListener { println("clicked") }