Kotlin abstracte klasse en abstracte leden

In dit artikel leer je over abstracte klassen en hoe je deze in Kotlin kunt implementeren (met behulp van voorbeelden).

Net als Java wordt abstracttrefwoord gebruikt om abstracte klassen in Kotlin te declareren. Een abstracte klasse kan niet worden geïnstantieerd (u kunt geen objecten van een abstracte klasse maken). U kunt echter subklassen van can hen erven.

De leden (eigenschappen en methoden) van een abstracte klasse zijn niet-abstract, tenzij u het abstractsleutelwoord expliciet gebruikt om ze abstract te maken. Laten we een voorbeeld nemen:

 abstract class Person (var age: Int = 40 fun displaySSN (ssn: Int) (println ("My SSN is $ ssn.")) abstract fun displayJob (description: String))

Hier,

  • er wordt een abstracte klasse Persongemaakt. U kunt geen objecten van de klasse maken.
  • de klasse heeft een niet-abstracte eigenschap leeftijd en een niet-abstracte methode displaySSN(). Als u deze leden in de subklasse moet overschrijven, moeten ze worden gemarkeerd met een opentrefwoord.
  • De klas heeft een abstracte methode displayJob(). Het heeft geen enkele implementatie en moet in zijn subklassen worden overschreven.

Opmerking: abstracte lessen zijn altijd open. U hoeft opentrefwoord niet expliciet te gebruiken om subklassen van hen over te nemen.

Voorbeeld: Kotlin abstracte klasse en methode

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

Wanneer u het programma uitvoert, is de uitvoer:

Mijn naam is Jack Smith. Ik ben een wiskundeleraar. Mijn SSN is 23123.

Hier wordt een klasse Teacherafgeleid van een abstracte klasse Person.

Een objectjack van de klasse Teacher wordt geïnstantieerd. We hebben "Jack Smith"als parameter doorgegeven aan de primaire constructor tijdens het maken ervan. Dit voert het initialisatieblok van de Personklasse uit.

Vervolgens wordt de displayJob()methode aangeroepen met behulp van het jack-object. Merk op dat de displayJob()methode abstract wordt gedeclareerd in de basisklasse en overschreven in de afgeleide klasse.

Ten slotte wordt de displaySSN()methode aangeroepen met behulp van het jack-object. De methode is niet abstract en wordt gedeclareerd in Person class (en niet gedeclareerd in Teacherclass).

Aanbevolen literatuur: Kotlin-interfaces

Kotlin-interfaces zijn vergelijkbaar met abstracte klassen. Interfaces kunnen echter geen status opslaan, terwijl abstracte klassen dat wel kunnen.

Dit betekent dat de interface een eigenschap kan hebben, maar deze moet abstract zijn of moet accessor-implementaties bieden. Terwijl het niet verplicht is dat eigenschap van een abstracte klasse abstract is.

Interessante artikelen...