English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Classe abstraite (Abstract) en Kotlin

Dans cet article, vous apprendrez les classes abstraites et comment les implémenter en Kotlin (à l'aide d'exemples).

Comme en Java, la clé abstract est utilisée pour déclarer des classes abstraites en Kotlin. Il est impossible d'instancier une classe abstraite (on ne peut pas créer d'objet de la classe abstraite). Cependant, vous pouvez en hériter des sous-classes.

À moins que vous ne l'abstraisez explicitement avec la clé abstract, les membres des classes abstraites (attributs et méthodes) ne sont pas abstraits. Laissons un exemple :

abstract class Person {
    
    var age: Int = 40
    fun displaySSN(ssn: Int) {
        println("Mon numéro de sécurité sociale est: $ssn.")
    }
    abstract fun displayJob(description: String)
}

Ici,

  • Créez une classe abstraite Person. Vous ne pouvez pas créer d'objet de cette classe.

  • Cette classe a des attributs non abstraits age et des méthodes non abstraites displaySSN(). Si vous devez les redéfinir dans les sous-classes, utilisez la clé open.

  • Cette classe a une méthode abstraite displayJob(). Elle n'a aucune implémentation et doit être redéfinie dans les sous-classes.

Remarque :Les classes abstraites sont toujours ouvertes. Vous n'avez pas besoin d'utiliser explicitement la clé open pour hériter de sous-classes.

Exemple : classe abstraite et méthode en Kotlin

abstract class Person(name: String) {
    init {
        println("Mon nom est $name.")
    }
    fun displaySSN(ssn: Int) {
        println("Mon numéro de sécurité sociale est $ssn.")
    }
    abstract fun displayJob(description: String)
}
class Teacher(name: String): Person(name) {
    override fun displayJob(description: String) {
        println(description)
    }
}
fun main(args: Array<String>) {
    val jack = Teacher("Jack Smith")
    jack.displayJob("Je suis un enseignant de mathématiques.")
    jack.displaySSN(23123)
}

Lors de l'exécution du programme, la sortie est :

Mon nom est  Jack Smith.
Je suis un enseignant de mathématiques.
Mon numéro de sécurité sociale est 23123.

Dans ce cas, la classe Teacher hérite de la classe abstraite Person

L'objet Teacher de la classe est instancié. Lors de la création du constructeur principal, nous lui passons le paramètre 'Jack Smith'. Cela exécute le bloc d'initialisation de la classe Person.

Ensuite, appeler la méthode displayJob() avec l'objet Jack. Notez que la méthode displayJob() est déclarée comme abstraite dans la classe de base et redéfinie dans la classe dérivée.
Enfin, appeler la méthode displaySSN() avec l'objet Jack. Cette méthode n'est pas abstraite et est déclarée dans la classe Person (et non dans la classe Teacher).

Connaissances connexes : Interface Kotlin

Les interfaces en Kotlin sont similaires aux classes abstraites. Cependant, les interfaces ne peuvent pas stocker d'état, tandis que les classes abstraites peuvent.

C'est-à-dire, une interface peut avoir des propriétés, mais elles doivent être abstraites ou fournir une implémentation d'accesseur. Cependant, les propriétés des classes abstraites ne doivent pas nécessairement être abstraites.