인터페이스
- Java8과 유사. 추상 메소드와 메소드 구현을 가질 수 있다
인터페이스 구현
클래스 혹은 오브젝트는 1개 이상의 인터페이스를 가질 수 있다
class Child : MyInterface {
override fun bar() {
// body
}
}
인터페이스의 프로퍼티
- 인터페이스에서 프로퍼티 선언 가능
- 추상형이지만 Accessor 구현 가능
- Backing Field 를 가질 수 없다. 인터페이스에서 선언한 Accessor는 그것을 참조할 수 없음
interface MyInterface {
val prop: Int // abstract
val propertyWithImplementation: String
get() = "foo"
fun foo() {
print(prop)
}
}
class Child : MyInterface {
override val prop: Int = 29
}
오버라이딩 충돌 해결
interface A {
fun foo() { print("A") }
fun bar()
}
interface B {
fun foo() { print("B") }
fun bar() { print("bar") }
}
class C : A {
override fun bar() { print("bar") }
}
class D : A, B {
override fun foo() {
super<A>.foo()
super<B>.foo()
}
override fun bar() {
super<B>.bar()
}
}
명시적으로 오버라이딩 대상을 정의해서 호