Sobes.tech
Junior

Povedzte o reťazci dedičstva tried v programovacom jazyku Swift.

sobes.tech AI

Odpoveď od AI

Triedy v Swift podporujú jednoduché dedičstvo. Každá trieda dedí od rodičovskej triedy, čím vzniká hierarchia. Reťazec dedičstva začína základnou triedou, ktorá nezdedí od ničoho, a rozširuje sa nadol cez podtriedy.

Vlastnosti dedičstva:

  • Prepisovanie (Overriding): Podtrieda môže prepísať implementáciu metód, vlastností a subskriptov rodičovskej triedy. Používa sa kľúčové slovo override.
  • Zamedzenie prepisovania (Preventing Overrides): Je možné zabrániť prepisovaniu člena triedy označením kľúčového slova final. Celú triedu je možné deklarovať ako final.
  • Prístup k rodičovskej triede: Podtrieda môže získať prístup k implementovaným členom rodičovskej triedy pomocou kľúčového slova super. Toto je užitočné na volanie implementácie rodičovskej metódy alebo prístup k rodičovskej vlastnosti.

Príklad:

// Základná trieda
class Vehicle {
    var currentSpeed = 0.0

    func makeNoise() {
        // Prázdna implementácia
    }
}

// Podtrieda, ktorá dedí od Vehicle
class Car: Vehicle {
    var numberOfDoors = 4

    // Prepisovanie metódy makeNoise
    override func makeNoise() {
        print("Bip bip")
    }
}

// Podtrieda, ktorá dedí od Car
class ElectricCar: Car {
    var batteryLevel = 100.0

    // Pridanie novej vlastnosti
    let isElectric = true

    // Prepisovanie vlastnosti z rodičovskej triedy
    override internal var currentSpeed: Double {
        didSet {
            if currentSpeed > 0 {
                print("Elektrické auto sa pohybuje")
            }
        }
    }
}

V tomto príklade:

  • Vehicle — základná trieda.
  • Car dedí od Vehicle. Pridáva vlastnosť numberOfDoors a prepíše metódu makeNoise.
  • ElectricCar dedí od Car. Pridáva vlastnosť batteryLevel, konštantu isElectric a prepíše vlastnosť currentSpeed.

Reťazec dedičstva: Vehicle -> Car -> ElectricCar. Každá trieda v tomto reťazci má prístup ku všetkým verejným (alebo v inom kontexte dostupným) členom vyšších tried v hierarchii.