En Kotlin, como en Java, puede declarar una clase abstracta y no se pueden crear instancias de dichas clases. Una clase abstracta generalmente contiene miembros abstractos que no tienen implementaciones y deben anularse en las subclases. Los miembros abstractos siempre están abiertos, por lo que no necesita usar un modificador de apertura explícito:
abstract class Animated {
abstract fun animate()
open fun stopAnimating() { }
fun animateTwice() { }
}
Veamos los diferentes tipos de modificadores:
- final: esta por defecto en las clases y no se puede sobreescribir el método
- open: no esta por defecto las clases salvo que sea un método abstracto o interfaz y se puede sobreescribir
- abstract: se debe sobreescribir y puede ser usado solo en clases abstractas
- override: indica que estamos sobreescribiendo un método y es open por defecto salvo que le pongamos final.
En las interfaces, no se usa final, open o abstract. Un miembro en una interfaz siempre está abierto; no puedes declararlo como definitivo o final. Es abstracto si no tiene cuerpo, pero no se requiere la palabra clave.