Estenda e implemente ao mesmo tempo em Kotlin

88

Em Java, você pode fazer coisas como:

class MyClass extends SuperClass implements MyInterface, ...

É possível fazer a mesma coisa em Kotlin? O pressuposto SuperClassé abstrato e não implementaMyInterface

chntgomez
fonte

Respostas:

141

Não há diferença sintática entre implementação de interface e herança de classe . Simplesmente liste todos os tipos separados por vírgulas após dois pontos, :conforme mostrado aqui:

abstract class MySuperClass
interface MyInterface

class MyClass : MySuperClass(), MyInterface, Serializable

A herança de várias classes é proibida, enquanto várias interfaces podem ser implementadas por uma única classe.

s1m0nw1
fonte
1
Então, a ordem importa ou o parêntese cuida de quem é o pai e quais são as interfaces?
SMBiggs
Não consigo pensar em uma razão pela qual a ordem importaria. Sim, cada classe abstrata precisará de parênteses, enquanto as interfaces funcionam sem. O compilador sabe se você está implementando uma interface ou estendendo uma superclasse
s1m0nw1
2

Esta é a sintaxe geral a ser usada quando uma classe está estendendo (outra classe) ou implementando (uma ou interfaces de servidor):

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

Observe que a ordem das classes e interfaces não importa.

Além disso, observe que, para a classe que é estendida, usamos parênteses, o parêntese se refere ao construtor principal da classe pai. Portanto, se o construtor principal da classe pai receber um argumento, a classe filha também deverá passar esse argumento.

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")
    }
}
Sr. Q
fonte