Dans cet article, vous découvrirez la classe abstraite et comment l'implémenter dans Kotlin (à l'aide d'exemples).
Comme Java, le abstract
mot-clé est utilisé pour déclarer des classes abstraites dans Kotlin. Une classe abstraite ne peut pas être instanciée (vous ne pouvez pas créer d'objets d'une classe abstraite). Cependant, vous pouvez hériter des sous-classes de can them.
Les membres (propriétés et méthodes) d'une classe abstraite ne sont pas abstraits, sauf si vous utilisez explicitement un abstract
mot-clé pour les rendre abstraits. Prenons un exemple:
classe abstraite Person (var age: Int = 40 fun displaySSN (ssn: Int) (println ("Mon SSN est $ ssn.")) abstract fun displayJob (description: String))
Ici,
- une classe abstraite
Person
est créée. Vous ne pouvez pas créer d'objets de la classe. - la classe a un âge de propriété non abstrait et une méthode non abstraite
displaySSN()
. Si vous devez remplacer ces membres dans la sous-classe, ils doivent être marqués avec unopen
mot-clé. - La classe a une méthode abstraite
displayJob()
. Il n'a aucune implémentation et doit être remplacé dans ses sous-classes.
Remarque: les classes abstraites sont toujours ouvertes. Vous n'avez pas besoin d'utiliser explicitement un open
mot-clé pour en hériter des sous-classes.
Exemple: Classe abstraite et méthode Kotlin
abstract class Person(name: String) ( init ( println("My name is $name.") ) fun displaySSN(ssn: Int) ( println("My SSN is $ssn.") ) abstract fun displayJob(description: String) ) class Teacher(name: String): Person(name) ( override fun displayJob(description: String) ( println(description) ) ) fun main(args: Array) ( val jack = Teacher("Jack Smith") jack.displayJob("I'm a mathematics teacher.") jack.displaySSN(23123) )
Lorsque vous exécutez le programme, la sortie sera:
Je m'appelle Jack Smith. Je suis professeur de mathématiques. Mon SSN est 23123.
Ici, une classe Teacher
est dérivée d'une classe abstraite Person
.
Un objet jack de la classe Teacher est instancié. Nous avons passé "Jack Smith"
en paramètre le constructeur principal lors de sa création. Cela exécute le bloc d'initialisation de la Person
classe.
Ensuite, la displayJob()
méthode est appelée en utilisant l'objet jack. Notez que la displayJob()
méthode est déclarée abstraite dans la classe de base et remplacée dans la classe dérivée.
Enfin, la displaySSN()
méthode est appelée en utilisant l'objet jack. La méthode est non abstraite et déclarée dans la classe Person (et non déclarée dans la Teacher
classe).
Lecture recommandée: Interfaces Kotlin
Les interfaces Kotlin sont similaires aux classes abstraites. Cependant, les interfaces ne peuvent pas stocker l'état, contrairement aux classes abstraites.
Cela signifie que l'interface peut avoir une propriété, mais elle doit être abstraite ou doit fournir des implémentations d'accesseur. Alors qu'il n'est pas obligatoire pour la propriété d'une classe abstraite d'être abstraite.