Junior
Αναφέρετε τη σειρά κληρονόμησης των κλάσεων στη γλώσσα Swift.
sobes.tech AI
Απάντηση από AI
Στο Swift, όλες οι κλάσεις κληρονομούν έμμεσα από τη βασική κλάση NSObject, ακόμη και αν αυτό δεν δηλώνεται ρητά. Αυτό διακρίνει το Swift από ορισμένες άλλες γλώσσες, όπου μπορεί να υπάρχουν πολλαπλές ριζικές κλάσεις.
Η αλυσίδα κληρονομιάς αντιπροσωπεύει μια ιεραρχία όπου κάθε κλάση κληρονομεί ιδιότητες και μεθόδους από τη γονική της κλάση (υπερκλάση). Μια κλάση μπορεί να έχει μόνο μια άμεση υπερκλάση.
Παράδειγμα:
// Βασική κλάση (κληρονομεί έμμεσα από το NSObject)
class Animal {
var name: String
init(name: String) {
self.name = name
}
func makeSound() {
print("Άγνωστος ήχος ζώου")
}
}
// Η κλάση Dog κληρονομεί από την Animal
class Dog: Animal {
let breed: String
init(name: String, breed: String) {
self.breed = breed
super.init(name: name) // Κλήση του αρχικοποιητή της υπερκλάσης
}
override func makeSound() { // Υπερκαλύπτει τη μέθοδο της υπερκλάσης
print("Γαβγ-γαβγ")
}
}
// Η κλάση Poodle κληρονομεί από την Dog
class Poodle: Dog {
var isHypoallergenic: Bool
init(name: String, breed: String, isHypoallergenic: Bool) {
self.isHypoallergenic = isHypoallergenic
super.init(name: name, breed: breed) // Κλήση του αρχικοποιητή της υπερκλάσης
}
// Το Poodle δεν υπερκαλύπτει το makeSound, κληρονομεί αυτό από το Dog
}
let myDog = Dog(name: "Buddy", breed: "Labrador")
myDog.makeSound() // Εκτυπώνει: Γαβγ-γαβγ
let myPoodle = Poodle(name: "Lucy", breed: "Miniature Poodle", isHypoallergenic: true)
myPoodle.makeSound() // Εκτυπώνει: Γαβγ-γαβγ - κληρονομεί από το Dog
Σημεία κλειδιά:
- Κληρονομικότητα: Η κλάση
B: Aσημαίνει ότι η κλάσηBκληρονομεί από τηνA. - Υπερκλάση: Η κλάση από την οποία κληρονομεί. Στο παράδειγμα, η
Animalείναι η υπερκλάση για τοDog, και τοDogείναι η υπερκλάση για τοPoodle. - Υποκλάση: Η κλάση που κληρονομεί από μια άλλη κλάση. Στο παράδειγμα, το
Dogείναι υποκλάση τηςAnimal, και τοPoodleείναι υποκλάση τουDog. super: Χρησιμοποιείται για πρόσβαση στην υλοποίηση μεθόδων ή αρχικοποιητών της υπερκλάσης.override: Λέξη-κλειδί που χρησιμοποιείται για να υπερκαλύψει μεθόδους ή ιδιότητες της υπερκλάσης στην υποκλάση.final: Τροποποιητής που μπορεί να εφαρμοστεί σε κλάσεις, μεθόδους ή ιδιότητες για να απαγορεύσει την υπερκαλύψή τους ή την κληρονομιά.
Πίνακας που απεικονίζει την αλυσίδα κληρονομιάς στο παράδειγμα:
| Κλάση | Κληρονομεί από | Υπερκαλύπτει makeSound; |
|---|---|---|
NSObject |
- | Όχι |
Animal |
NSObject |
Όχι |
Dog |
Animal |
Ναι |
Poodle |
Dog |
Όχι |
Η αλυσίδα κληρονομιάς επιτρέπει την επανάχρηση κώδικα, τη δημιουργία εξειδικευμένων εκδόσεων κλάσεων και την οργάνωση της δομής δεδομένων σε ιεραρχική μορφή.