Classe abstraite Kotlin et membres abstraits

Dans cet article, vous découvrirez la classe abstraite et comment l'implémenter dans Kotlin (à l'aide d'exemples).

Comme Java, le abstractmot-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 abstractmot-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 Personest 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 un openmot-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 openmot-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 Teacherest 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 Personclasse.

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 Teacherclasse).

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.

Articles intéressants...