Πώς πραγματοποιείται η κληρονομιά στη γλώσσα Kotlin;
sobes.tech AI
Απάντηση από AI
Η κληρονομικότητα στο Kotlin βασίζεται στις λέξεις-κλειδιά open και override. Οι κλάσεις και οι μέθοδοι είναι final από προεπιλογή, που σημαίνει ότι δεν μπορούν να κληρονομηθούν ή να υπερισχύσουν. Για να επιτραπεί η κληρονομικότητα, η κλάση ή η μέθοδος πρέπει να σημειωθεί με τον τροποποιητή open.
Για τη δημιουργία μιας υποκλάσης, χρησιμοποιείται δύο τελείες : μετά το όνομα της βασικής κλάσης, ακολουθούμενο από το όνομα της βασικής κλάσης με τον κατασκευαστή της.
open class Base(val name: String) {
open fun greet() {
println("Γειά σου, $name")
}
}
Για την υπερκαθορισμό μιας μεθόδου της βασικής κλάσης στην υποκλάση, χρησιμοποιείται ο τροποποιητής override.
class Derived(name: String) : Base(name) {
override fun greet() {
println("Χαιρετισμοί, $name")
}
}
Εάν η βασική κλάση έχει κατασκευαστή με παραμέτρους, η υποκλάση πρέπει να τον καλέσει χρησιμοποιώντας τη λέξη-κλειδί super.
Το Kotlin υποστηρίζει πολλαπλή κληρονομικότητα μέσω διασυνδέσεων (interfaces), αλλά όχι κλάσεων. Μια κλάση μπορεί να κληρονομήσει μόνο από μία άλλη κλάση.
Μια κλάση μπορεί επίσης να σημειώσει τα μέλη της ως protected, internal ή private, περιορίζοντας την ορατότητά τους για τις υποκλάσεις ή εντός του module.
Οι αφηρημένες κλάσεις δηλώνονται με τη λέξη-κλειδί abstract. Μπορούν να περιέχουν τόσο αφηρημένες (χωρίς υλοποίηση) όσο και κανονικές μεθόδους. Οι αφηρημένες μέθοδοι δεν χρειάζονται το open, καθώς υπονοείται ότι θα υπερισχύσουν. Οι αφηρημένες κλάσεις δεν μπορούν να δημιουργηθούν άμεσα.
abstract class Shape {
abstract fun draw()
open fun printInfo() {
println("Αυτή είναι μια μορφή.")
}
}
Έτσι, η κληρονομικότητα στο Kotlin ελέγχεται ρητά μέσω των τροποποιητών open και override, που βελτιώνουν την αναγνωσιμότητα και αποτρέπουν την ανεπιθύμητη κληρονομικότητα.