Kotlin Abstract Class and Abstract Members

W tym artykule dowiesz się o klasie abstrakcyjnej i jak ją zaimplementować w Kotlinie (na przykładach).

Podobnie jak Java, abstractsłowo kluczowe służy do deklarowania klas abstrakcyjnych w Kotlin. Nie można utworzyć instancji klasy abstrakcyjnej (nie można tworzyć obiektów klasy abstrakcyjnej). Możesz jednak dziedziczyć podklasy z can them.

Elementy członkowskie (właściwości i metody) klasy abstrakcyjnej nie są abstrakcyjne, chyba że jawnie użyjesz abstractsłowa kluczowego, aby uczynić je abstrakcyjnymi. Weźmy przykład:

 abstract class Person (var age: Int = 40 fun displaySSN (ssn: Int) (println ("Mój numer SSN to $ ssn.")) abstract fun displayJob (description: String))

Tutaj,

  • Persontworzona jest klasa abstrakcyjna . Nie możesz tworzyć obiektów tej klasy.
  • klasa ma nieabstrakcyjny wiek właściwości i nieabstrakcyjną metodę displaySSN(). Jeśli chcesz nadpisać te elementy w podklasie, należy je oznaczyć opensłowem kluczowym.
  • Klasa ma metodę abstrakcyjną displayJob(). Nie ma żadnej implementacji i musi zostać zastąpiony w swoich podklasach.

Uwaga: zajęcia abstrakcyjne są zawsze otwarte. Nie musisz jawnie używać opensłowa kluczowego, aby dziedziczyć z nich podklasy.

Przykład: Klasa abstrakcyjna Kotlin i metoda

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

Po uruchomieniu programu wynik będzie następujący:

Nazywam się Jack Smith. Jestem nauczycielem matematyki. Mój numer SSN to 23123.

Tutaj klasa Teacherpochodzi z klasy abstrakcyjnej Person.

Tworzona jest instancja obiektu jack klasy Teacher. Podczas tworzenia przekazaliśmy "Jack Smith"jako parametr do konstruktora głównego. Spowoduje to wykonanie bloku inicjalizatora Personklasy.

Następnie displayJob()wywoływana jest metoda przy użyciu obiektu jack. Należy zauważyć, że displayJob()metoda jest zadeklarowana jako abstrakcyjna w klasie bazowej i zastąpiona w klasie pochodnej.

Na koniec displaySSN()metoda jest wywoływana za pomocą obiektu jack. Metoda nie jest abstrakcyjna i zadeklarowana w klasie Person (i nie została zadeklarowana w Teacherklasie).

Zalecana lektura: interfejsy Kotlin

Interfejsy Kotlin są podobne do klas abstrakcyjnych. Jednak interfejsy nie mogą przechowywać stanu, podczas gdy klasy abstrakcyjne mogą.

Oznacza to, że interfejs może mieć właściwość, ale musi być abstrakcyjny lub musi zapewniać implementacje akcesorów. Natomiast nie jest obowiązkowe, aby własność klasy abstrakcyjnej była abstrakcyjna.

Interesujące artykuły...