Σε αυτό το άρθρο, θα μάθετε να εργάζεστε με ένθετα και εσωτερικά μαθήματα με τη βοήθεια παραδειγμάτων.
Kotlin Nested Class
Παρόμοια όπως η Java, το Kotlin σάς επιτρέπει να ορίσετε μια κλάση σε μια άλλη τάξη που είναι γνωστή ως ένθετη τάξη.
class Outer (… class Nested (…))
Δεδομένου ότι το Nested class είναι μέλος της συνοδευτικής κλάσης του Outer, μπορείτε να χρησιμοποιήσετε τη .
σημειογραφία για να αποκτήσετε πρόσβαση στην Nested
τάξη και στα μέλη της.
Παράδειγμα: Kotlin Nested Class
class Outer ( val a = "Outside Nested class." class Nested ( val b = "Inside Nested class." fun callMe() = "Function call from inside Nested class." ) ) fun main(args: Array) ( // accessing member of Nested class println(Outer.Nested().b) // creating object of Nested class val nested = Outer.Nested() println(nested.callMe()) )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Κατηγορία Inside Nested. Κλήση λειτουργίας από το εσωτερικό της ένθετης τάξης.
Για χρήστες Java
Η ένθετη τάξη στο Kotlin είναι παρόμοια με τη στατική ένθετη τάξη στην Java.
Στην Java, όταν δηλώνετε μια τάξη μέσα σε μια άλλη τάξη, γίνεται από προεπιλογή εσωτερική κλάση. Ωστόσο, στο Kotlin, πρέπει να χρησιμοποιήσετε τον εσωτερικό τροποποιητή για να δημιουργήσετε μια εσωτερική τάξη την οποία θα συζητήσουμε στη συνέχεια.
Εσωτερική τάξη Kotlin
Οι ένθετες τάξεις στο Kotlin δεν έχουν πρόσβαση στην εμφάνιση εξωτερικής τάξης. Για παράδειγμα,
class Outer ( val foo = "Outside Nested class." class Nested ( // Error! cannot access member of outer class. fun callMe() = foo ) ) fun main(args: Array) ( val outer = Outer() println(outer.Nested().callMe()) )
Ο παραπάνω κώδικας δεν θα μεταγλωττιστεί επειδή προσπαθήσαμε να αποκτήσουμε πρόσβαση στην ιδιότητα foo της κλάσης Outer από το εσωτερικό Nested class
Για να επιλύσετε αυτό το ζήτημα, πρέπει να επισημάνετε την ένθετη τάξη με εσωτερικό για να δημιουργήσετε μια εσωτερική τάξη. Οι εσωτερικές τάξεις φέρουν μια αναφορά σε μια εξωτερική τάξη και μπορούν να έχουν πρόσβαση στα μέλη της εξωτερικής τάξης.
Παράδειγμα: Εσωτερική τάξη Kotlin
class Outer ( val a = "Outside Nested class." inner class Inner ( fun callMe() = a ) ) fun main(args: Array) ( val outer = Outer() println("Using outer object: $(outer.Inner().callMe())") val inner = Outer().Inner() println("Using inner object: $(inner.callMe())") )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Χρήση εξωτερικού αντικειμένου: Outside Nested class. Χρήση εσωτερικού αντικειμένου: Outside Nested class.
Προτεινόμενη ανάγνωση: Ανώνυμη εσωτερική τάξη