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: Asignifica que a classeBherda deA. - Superclasse: A classe de que se herda. No exemplo,
Animalé a superclasse deDog, eDogé a superclasse dePoodle. - Subclasse: A classe que herda de outra classe. No exemplo,
Dogé subclasse deAnimal, ePoodleé subclasse deDog. 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.