Amplíe e implemente al mismo tiempo en Kotlin

88

En Java, puede hacer cosas como:

class MyClass extends SuperClass implements MyInterface, ...

¿Es posible hacer lo mismo en Kotlin? Asumir SuperClasses abstracto y no implementaMyInterface

chntgomez
fuente

Respuestas:

141

No hay diferencia sintáctica entre la implementación de la interfaz y la herencia de clases . Simplemente enumere todos los tipos separados por comas después de dos puntos :como se muestra aquí:

abstract class MySuperClass
interface MyInterface

class MyClass : MySuperClass(), MyInterface, Serializable

La herencia de clases múltiples está prohibida, mientras que una sola clase puede implementar varias interfaces.

s1m0nw1
fuente
1
Entonces, ¿importa el orden, o el paréntesis se ocupa de cuál es el padre y cuáles son las interfaces?
SMBiggs
No puedo pensar en una razón por la que el orden sea importante. Sí, cada clase abstracta necesitará parens mientras que las interfaces funcionan sin ellos. El compilador sabe si está implementando una interfaz o extendiendo una
superclase
2

Esta es la sintaxis general para usar cuando una clase se está extendiendo (otra clase) o implementando (una o varias interfaces):

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

Tenga en cuenta que el orden de las clases y las interfaces no importa.

Además, observe que para la clase que se extiende usamos paréntesis, el paréntesis se refiere al constructor principal de la clase principal. Por lo tanto, si el constructor principal de la clase principal toma un argumento, la clase secundaria también debería pasar ese 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")
    }
}
Señor q
fuente