Σε αυτό το άρθρο, θα μάθετε για την αφηρημένη τάξη και πώς να την εφαρμόσετε στο Kotlin (με τη βοήθεια παραδειγμάτων).
Όπως και η Java, η abstract
λέξη-κλειδί χρησιμοποιείται για να δηλώσει αφηρημένες τάξεις στο Kotlin. Μια αφηρημένη κλάση δεν μπορεί να τεκμηριωθεί (δεν μπορείτε να δημιουργήσετε αντικείμενα μιας αφηρημένης κλάσης). Ωστόσο, μπορείτε να κληρονομήσετε τις υποκατηγορίες από τους.
Τα μέλη (ιδιότητες και μέθοδοι) μιας αφηρημένης τάξης δεν είναι αφηρημένα, εκτός εάν χρησιμοποιείτε ρητά τη abstract
λέξη-κλειδί για να τα κάνετε αφηρημένα. Ας πάρουμε ένα παράδειγμα:
abstract class Person (var age: Int = 40 fun displaySSN (ssn: Int) (println ("Το SSN μου είναι $ ssn.")) abstract fun displayJob (περιγραφή: String))
Εδώ,
- δημιουργείται μια αφηρημένη τάξη
Person
. Δεν μπορείτε να δημιουργήσετε αντικείμενα της τάξης. - η τάξη έχει μια μη αφηρημένη εποχή ιδιοκτησίας και μια μη αφηρημένη μέθοδο
displaySSN()
. Εάν πρέπει να παρακάμψετε αυτά τα μέλη στην υποκατηγορία, θα πρέπει να επισημαίνονται μεopen
λέξη-κλειδί. - Η τάξη έχει μια αφηρημένη μέθοδο
displayJob()
. Δεν έχει καμία εφαρμογή και πρέπει να παρακαμφθεί στις υποκατηγορίες του.
Σημείωση: Τα αφηρημένα μαθήματα είναι πάντα ανοιχτά. Δεν χρειάζεται να χρησιμοποιείτε ρητά τη open
λέξη-κλειδί για να κληρονομήσετε υποκατηγορίες από αυτές.
Παράδειγμα: Kotlin Abstract Class and Method
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) )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Το όνομά μου είναι Τζακ Σμιθ. Είμαι καθηγητής μαθηματικών. Το SSN μου είναι 23123.
Εδώ, μια τάξη Teacher
προέρχεται από μια αφηρημένη τάξη Person
.
Δημιουργείται μια υποδοχή αντικειμένων της τάξης του Δασκάλου. Έχουμε περάσει "Jack Smith"
ως παράμετρος στον κύριο κατασκευαστή κατά τη δημιουργία του. Αυτό εκτελεί το μπλοκ αρχικοποίησης της Person
κλάσης.
Στη συνέχεια, η displayJob()
μέθοδος καλείται χρησιμοποιώντας αντικείμενο jack. Σημειώστε ότι η displayJob()
μέθοδος δηλώνεται αφηρημένη στην βασική κλάση και παρακάμπτεται στην παράγωγη κλάση.
Τέλος, η displaySSN()
μέθοδος καλείται χρησιμοποιώντας αντικείμενο jack. Η μέθοδος δεν είναι αφηρημένη και δηλώνεται στην κατηγορία Person (και δεν δηλώνεται στην Teacher
τάξη).
Συνιστώμενη ανάγνωση: Διεπαφές Kotlin
Οι διεπαφές Kotlin είναι παρόμοιες με αφηρημένες τάξεις. Ωστόσο, οι διεπαφές δεν μπορούν να αποθηκεύσουν κατάσταση ενώ οι αφηρημένες κλάσεις μπορούν.
Δηλαδή, η διασύνδεση μπορεί να έχει ιδιότητα, αλλά πρέπει να είναι αφηρημένη ή να παρέχει παρεμβάσεις. Ενώ δεν είναι υποχρεωτικό να είναι αφηρημένη η ιδιοκτησία μιας αφηρημένης τάξης.