Sobes.tech
Junior

Αναφέρετε τη σειρά κληρονόμησης κλάσεων στη γλώσσα προγραμματισμού Swift.

sobes.tech AI

Απάντηση από AI

Οι κλάσεις σε Swift υποστηρίζουν απλή κληρονομιά. Κάθε κλάση κληρονομεί από μια γονική κλάση, σχηματίζοντας μια ιεραρχία. Η αλυσίδα κληρονομιάς ξεκινάει από μια βασική κλάση που δεν κληρονομεί από τίποτα και επεκτείνεται προς τα κάτω μέσω των παιδικών κλάσεων.

Ιδιότητες κληρονομιάς:

  • Υπερκαλύπτοντας (Overriding): Η παιδική κλάση μπορεί να υπερκαλύψει την υλοποίηση μεθόδων, ιδιοτήτων και υπο-σκριπτών της γονικής κλάσης. Χρησιμοποιείται η λέξη-κλειδί override.
  • Πρόληψη υπερκαλύψεων (Preventing Overrides): Μπορεί να αποτραπεί η υπερκαλύψη ενός μέλους της κλάσης σημειώνοντάς το με τη λέξη-κλειδί final. Ολόκληρη η κλάση μπορεί να δηλωθεί ως final.
  • Πρόσβαση στη γονική κλάση: Η παιδική κλάση μπορεί να έχει πρόσβαση στα υλοποιημένα μέλη της γονικής κλάσης χρησιμοποιώντας τη λέξη-κλειδί super. Αυτό είναι χρήσιμο για την κλήση υλοποίησης μιας μεθόδου της γονικής κλάσης ή την πρόσβαση σε μια ιδιότητα της γονικής.

Παράδειγμα:

// Βασική κλάση
class Vehicle {
    var currentSpeed = 0.0

    func makeNoise() {
        // Κενή υλοποίηση
    }
}

// Παιδική κλάση που κληρονομεί από το Vehicle
class Car: Vehicle {
    var numberOfDoors = 4

    // Υπερκαλύπτοντας τη μέθοδο makeNoise
    override func makeNoise() {
        print("Beep beep")
    }
}

// Παιδική κλάση που κληρονομεί από το Car
class ElectricCar: Car {
    var batteryLevel = 100.0

    // Προσθήκη νέας ιδιότητας
    let isElectric = true

    // Υπερκαλύπτοντας την ιδιότητα της βασικής κλάσης
    override internal var currentSpeed: Double {
        didSet {
            if currentSpeed > 0 {
                print("Η ηλεκτρική αυτοκινητο κινείται")
            }
        }
    }
}

Σε αυτό το παράδειγμα:

  • Vehicle — βασική κλάση.
  • Car κληρονομεί από το Vehicle. Προσθέτει την ιδιότητα numberOfDoors και υπερκαλύπτει τη μέθοδο makeNoise.
  • ElectricCar κληρονομεί από το Car. Προσθέτει την ιδιότητα batteryLevel, τη σταθερά isElectric και υπερκαλύπτει την ιδιότητα currentSpeed.

Η αλυσίδα κληρονομιάς: Vehicle -> Car -> ElectricCar. Κάθε κλάση σε αυτήν την αλυσίδα έχει πρόσβαση σε όλα τα δημόσια (ή προσβάσιμα σε άλλο πλαίσιο) μέλη των ανώτερων κλάσεων στην ιεραρχία.