Sobes.tech
Junior

Povězte o řetězci dědičnosti tříd v jazyce Swift.

sobes.tech AI

Odpověď od AI

V Swiftu všechny třídy implicitně dědí od základní třídy NSObject, i když to není výslovně uvedeno. To odlišuje Swift od některých jiných jazyků, kde může být několik kořenových tříd.

Řetězec dědění představuje hierarchii, kde každá třída dědí vlastnosti a metody od své rodičovské třídy (superclass). Třída může mít pouze jednoho přímého supertřídu.

Příklad:

// Základní třída (implicitně dědí od NSObject)
class Animal {
    var name: String

    init(name: String) {
        self.name = name
    }

    func makeSound() {
        print("Neznámý zvuk zvířete")
    }
}

// Třída Dog dědí od Animal
class Dog: Animal {
    let breed: String

    init(name: String, breed: String) {
        self.breed = breed
        super.init(name: name) // Volání inicializátoru supertřídy
    }

    override func makeSound() { // Přepsání metody supertřídy
        print("Hav-hav")
    }
}

// Třída Poodle dědí od Dog
class Poodle: Dog {
    var isHypoallergenic: Bool

    init(name: String, breed: String, isHypoallergenic: Bool) {
        self.isHypoallergenic = isHypoallergenic
        super.init(name: name, breed: breed) // Volání inicializátoru supertřídy
    }

    // Poodle nepřepisuje makeSound, dědí jej od Dog
}

let myDog = Dog(name: "Buddy", breed: "Labrador")
myDog.makeSound() // Vypíše: Hav-hav

let myPoodle = Poodle(name: "Lucy", breed: "Miniature Poodle", isHypoallergenic: true)
myPoodle.makeSound() // Vypíše: Hav-hav - dědí od Dog

Klíčové body:

  • Dědění: Třída B: A znamená, že třída B dědí od třídy A.
  • Supertřída: Třída, od které dědí. V příkladu Animal je supertřídou pro Dog, a Dog je supertřídou pro Poodle.
  • Podtřída: Třída, která dědí od jiné třídy. V příkladu Dog je podtřídou Animal, a Poodle je podtřídou Dog.
  • super: Používá se pro přístup k implementaci metod nebo inicializátorů supertřídy.
  • override: Klíčové slovo používané k přepsání metod nebo vlastností supertřídy v podtřídě.
  • final: Modifikátor, který lze použít na třídu, metodu nebo vlastnost, aby se zakázalo její přepsání nebo dědění.

Tabulka ilustrující řetězec dědění v příkladu:

Třída Dědí od Přepisuje makeSound?
NSObject - Ne
Animal NSObject Ne
Dog Animal Ano
Poodle Dog Ne

Řetězec dědění umožňuje opětovné použití kódu, vytváření specializovaných verzí tříd a organizaci dat ve hierarchické struktuře.