În acest articol, veți afla despre clasa abstractă și cum să o implementați în Kotlin (cu ajutorul exemplelor).
La fel ca Java, abstract
cuvâ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 abstract
cuvâ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,
Person
se 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 cuopen
cuvâ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 open
cuvintele 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ă Teacher
este 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 Person
clasei.
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 Teacher
clasă).
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ă.