Kotlin Abstract Class și Abstract Members

În acest articol, veți afla despre clasa abstractă și cum să o implementați în Kotlin (cu ajutorul exemplelor).

La fel ca Java, abstractcuvântul cheie este folosit pentru a declara clase abstracte în Kotlin. O clasă abstractă nu poate fi instanțiată (nu puteți crea obiecte dintr-o clasă abstractă). Cu toate acestea, puteți moșteni subclasele din can them.

Membrii (proprietățile și metodele) unei clase abstracte nu sunt abstracte, cu excepția cazului în care utilizați în mod explicit abstractcuvântul cheie pentru a le face abstracte. Să luăm un exemplu:

 abstract class Person (var age: Int = 40 fun displaySSN (ssn: Int) (println ("SSN-ul meu este $ ssn.")) abstract fun displayJob (descriere: String))

Aici,

  • Personse creează o clasă abstractă . Nu puteți crea obiecte ale clasei.
  • clasa are o vârstă de proprietate non-abstractă și o metodă non-abstractă displaySSN(). Dacă trebuie să înlocuiți acești membri din subclasă, aceștia ar trebui să fie marcați cu opencuvânt cheie.
  • Clasa are o metodă abstractă displayJob(). Nu are nicio implementare și trebuie înlocuit în subclasele sale.

Notă: Clasele de abstract sunt întotdeauna deschise. Nu trebuie să utilizați în mod explicit opencuvintele cheie pentru a moșteni subclasele de la acestea.

Exemplu: Clasa și metoda abstractă 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) )

Când rulați programul, ieșirea va fi:

Numele meu este Jack Smith. Sunt profesor de matematică. Numărul meu SSN este 23123.

Aici, o clasă Teachereste derivată dintr-o clasă abstractă Person.

Se creează un jack de obiecte din clasa profesor. Am trecut "Jack Smith"ca parametru constructorului primar în timp ce îl creăm. Aceasta execută blocul de inițialist al Personclasei.

Apoi, displayJob()metoda se numește folosind obiect jack. Rețineți că displayJob()metoda este declarată abstractă în clasa de bază și suprascrisă în clasa derivată.

În cele din urmă, displaySSN()metoda se numește folosind obiect jack. Metoda este non-abstractă și declarată în clasa Person (și nu declarată în Teacherclasă).

Lectură recomandată: interfețe Kotlin

Interfețele Kotlin sunt similare claselor abstracte. Cu toate acestea, interfețele nu pot stoca starea, în timp ce clasele abstracte pot.

Adică, interfața poate avea proprietăți, dar trebuie să fie abstractă sau trebuie să ofere implementări pentru accesori. În timp ce nu este obligatoriu ca proprietatea unei clase abstracte să fie abstractă.

Articole interesante...