Kotlin에서 동시에 확장 및 구현


88

Java에서는 다음과 같은 작업을 수행 할 수 있습니다.

class MyClass extends SuperClass implements MyInterface, ...

Kotlin에서 동일한 작업을 수행 할 수 있습니까? SuperClass추상적이고 구현하지 않는다고 가정MyInterface

답변:


141

인터페이스 구현클래스 상속 사이에는 구문상의 차이가 없습니다 . 다음 :과 같이 콜론 뒤에 쉼표로 구분 된 모든 유형을 나열하기 만하면 됩니다.

abstract class MySuperClass
interface MyInterface

class MyClass : MySuperClass(), MyInterface, Serializable

다중 클래스 상속은 금지되지만 단일 클래스에서 다중 인터페이스를 구현할 수 있습니다.


1
그래서 순서가 중요합니까, 아니면 괄호가 부모와 인터페이스를 처리합니까?
SMBiggs

주문이 중요한 이유를 생각할 수 없습니다. 예, 모든 추상 클래스에는 괄호가 필요하지만 인터페이스가없이 작동합니다. 컴파일러는 인터페이스를 구현하는지 아니면 수퍼 클래스를 확장 하는지를 알고 있습니다.
s1m0nw1

2

다음은 클래스가 확장 (다른 클래스) 또는 구현 (하나 또는 서버 인터페이스) 할 때 사용할 일반 구문입니다.

class Child: InterfaceA, InterfaceB, Parent(), InterfaceZ

클래스와 인터페이스의 순서는 중요하지 않습니다.

또한 확장 된 클래스의 경우 괄호를 사용하고 괄호는 부모 클래스의 주 생성자를 참조합니다. 따라서 부모 클래스의 주 생성자가 인수를 받으면 자식 클래스도 해당 인수를 전달해야합니다.

interface InterfaceX {
   fun test(): String
}

open class Parent(val name:String) {
    //...
}

class Child(val toyName:String) : InterfaceX, Parent("dummyName"){

    override fun test(): String {
        TODO("Not yet implemented")
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.