Sobes.tech
Junior

Fale sobre a cadeia de herança de classes na linguagem Swift.

sobes.tech IA

Resposta da IA

Em Swift, todas as classes herdam implicitamente de NSObject, mesmo que isso não seja explicitamente indicado. Isto distingue Swift de algumas outras linguagens, onde podem existir várias classes raiz.

A cadeia de herança representa uma hierarquia onde cada classe herda propriedades e métodos da sua classe pai (superclasse). Uma classe pode ter apenas uma superclasse direta.

Exemplo:

// Classe base (herda implicitamente de NSObject)
class Animal {
    var name: String

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

    func makeSound() {
        print("Som desconhecido do animal")
    }
}

// A classe Dog herda de Animal
class Dog: Animal {
    let breed: String

    init(name: String, breed: String) {
        self.breed = breed
        super.init(name: name) // Chamada ao inicializador da superclasse
    }

    override func makeSound() { // Sobrescrever método da superclasse
        print("Au-au")
    }
}

// A classe Poodle herda de Dog
class Poodle: Dog {
    var isHypoallergenic: Bool

    init(name: String, breed: String, isHypoallergenic: Bool) {
        self.isHypoallergenic = isHypoallergenic
        super.init(name: name, breed: breed) // Chamada ao inicializador da superclasse
    }

    // Poodle não sobrescreve makeSound, herdando de Dog
}

let myDog = Dog(name: "Buddy", breed: "Labrador")
myDog.makeSound() // Vai imprimir: Au-au

let myPoodle = Poodle(name: "Lucy", breed: "Miniature Poodle", isHypoallergenic: true)
myPoodle.makeSound() // Vai imprimir: Au-au - herdado de Dog

Pontos-chave:

  • Herança: A classe B: A significa que a classe B herda de A.
  • Superclasse: A classe de que se herda. No exemplo, Animal é a superclasse de Dog, e Dog é a superclasse de Poodle.
  • Subclasse: A classe que herda de outra classe. No exemplo, Dog é subclasse de Animal, e Poodle é subclasse de Dog.
  • super: Usado para aceder à implementação de métodos ou inicializadores da superclasse.
  • override: Palavra-chave usada para sobrescrever métodos ou propriedades da superclasse na subclasse.
  • final: Modificador que pode ser aplicado a classes, métodos ou propriedades para impedir a sua sobrescrição ou herança.

Tabela que ilustra a cadeia de herança no exemplo:

Classe Herda de Sobrescreve makeSound?
NSObject - Não
Animal NSObject Não
Dog Animal Sim
Poodle Dog Não

A cadeia de herança permite reutilizar código, criar versões especializadas de classes e organizar a estrutura de dados de forma hierárquica.