English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Artikel werden Sie die abstrakten Klassen und wie man sie in Kotlin implementiert (mit Beispielen) lernen.
Wie in Java wird das Schlüsselwort 'abstract' in Kotlin verwendet, um abstrakte Klassen zu deklarieren. Abstrakte Klassen können nicht instanziert werden (man kann keine Objekte abstrakter Klassen erstellen). Aber Sie können von ihnen Unterklassen ableiten.
Es sei denn, Sie verwenden explizit das Schlüsselwort 'abstract', um es abstrakt zu machen, sind die Mitglieder (Eigenschaften und Methoden) einer abstrakten Klasse nicht-abstrakt. Lassen Sie uns ein Beispiel nennen:
abstract class Person { var age: Int = 40 fun displaySSN(ssn: Int) { println("Meine Sozialversicherungsnummer ist: $ssn.") } abstract fun displayJob(description: String) }
Hier,
Erstellen Sie eine abstrakte Klasse Person. Sie können kein Objekt dieser Klasse erstellen.
Diese Klasse hat nicht-abstrakte Eigenschaften age und nicht-abstrakte Methoden displaySSN(). Wenn Sie diese Mitglieder in der Unterklasse überschreiben müssen, sollten Sie sie mit dem Schlüsselwort 'open' markieren.
Diese Klasse hat ein abstraktes Methoden displayJob(). Sie hat keine Implementierung und muss in der Unterklasse überschrieben werden.
Hinweis:Abstrakte Klassen sind immer offen. Sie müssen nicht explizit den Schlüsselwort 'open' verwenden, um von ihnen abgeleitete Unterklassen zu erstellen.
abstract class Person(name: String) { init { println("Mein Name ist $name.") } fun displaySSN(ssn: Int) { println("Meine Sozialversicherungsnummer ist $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("Ich bin ein Mathematiklehrer.") jack.displaySSN(23123) }
Wenn das Programm ausgeführt wird, lautet die Ausgabe:
Mein Name ist Jack Smith. Ich bin ein Mathematiklehrer. Meine Sozialversicherungsnummer ist 23123.
Hier leitet sich die Klasse Teacher von der abstrakten Klasse Person ab
Das Objekt der Klasse 'Teacher' namens jack wird instanziert. Beim Erstellen des Hauptkonstruktors übergeben wir 'Jack Smith' als Parameter daran. Dies führt zum Ausführen des Initialisierungsblocks der Klasse Person.
Dann wird das displayJob()-Verfahren mit dem Jack-Objekt aufgerufen. Beachten Sie, dass das displayJob()-Verfahren in der Basisklasse als abstrakt deklariert und in der Ableitungsklasse überschrieben wird.
Schließlich wird das displaySSN()-Verfahren mit dem Jack-Objekt aufgerufen. Dieses Verfahren ist nicht abstrakt und wird in der Person-Klasse deklariert (nicht in der Teacher-Klasse deklariert).
Verwandte Informationen: Kotlin Schnittstelle
Kotlin Schnittstellen ähneln abstrakten Klassen. Allerdings können Schnittstellen keinen Zustand speichern, während abstrakte Klassen dies können.
Das bedeutet, dass Schnittstellen möglicherweise Eigenschaften haben können, aber sie müssen entweder abstrakt sein oder müssen Zugriffsersteller implementieren. Allerdings müssen die Eigenschaften einer abstrakten Klasse nicht unbedingt abstrakt sein.