En Kotlin par défaut les classes ne sont pas extensibless et les méthodes ne sont pas redéfinissables, il faut autoriser explicitement la possiblité de les étendre / redéfinir en utilisant le mot clé open :

open class Animal

class Cat : Animal()

open class Car {
    // drive peut être redéfinie
    open fun drive() {
        ...
    }

    // stop ne peut pas être redéfinie
    fun stop() {
        ...
    }
}

class Tesla : Car() {
    override fun drive() {
        ...
    }
}

Note : Le mot clé override est obligatoire en Kotlin, contrairement à Java. Ainsi si la méthode est supprimée dans la classe mère une erreur sera levèe à la compilation.

Par contre si une classe implémente une interface, les méthodes de l’interface seront redéfinies et ouvertes à la redéfinition par défaut.
Dans la classe implémentant l’interface si on souhaite interdire la redéfinition de la méthode il faut utiliser le mot clé final (override implique open) :

interface Drivable {
    fun drive()

    fun stop()
}

class Car : Drivable {
    // drive peut être redéfinie
    open fun drive() {
        ...
    }

    // stop ne peut pas être redéfinie
    final fun stop() {
        ...
    }
}

class Tesla : Car() {
    override fun drive() {
        ...
    }
}

Note : il est important de noter également que les interfaces sont obligatoirement ouvertes à l’extension, créer une interface non implémentable ou extensible n’aurait aucun intérêt.