Tout comme l’héritage entre êtres vivants, les classe ont aussi un héritage, on appelle cela aussi des sous classes. L’héritage signifie que la sous classe ou classe enfant hérite des propriétés et méthodes de sa classe mère mais dispose en plus de ses propres propriétés et méthodes.

Prenons l’exemple de notre ordinateur. il avait une marque, un modèle, une ram, un stockage

class Ordinateur {
    var marque: String
    var modele: String
    var ram: Int
    var stockage: Int
    init(marque: String, modele: String, ram: Int, stockage: Int) {
        self.marque = marque
        self.modele = modele
        self.ram = ram
        self.stockage = stockage
    }
} 

Prenons maintenant un ordinateur portable, il aura les mêmes propriétés mais en plus il aura une autonomie par exemple. Au lieu de refaire toute une classe nous allons faire hériter le portable de Ordinateur

class Macbook: Ordinateur {
    var autonomie: Int
    init(marque: String, modele: String, ram: Int, stockage: Int, autonomie: Int) {
        self.autonomie = autonomie
        super.init(marque: marque, modele: modele, ram: ram, stockage: stockage)
    }
} 

Nous pouvons voir que nous n’avons pas à réécrire toutes les propriétés de base mais que dans l’init, nous devons bien toutes les ajouter en paramètres. Ensuite nous pouvons donner une valeur à autonomie et avec le mot clé super, initialiser sa super classe ou sa classe mère.

La classe héritante peut accéder donc à toutes les méthodes et propriétés de la classe mère et avoir les siennes.Pour faire hériter d’un objet, on ajoute : puis le nom de la classe mère après le nom

class Macbook: Ordinateur {
    var autonomie: Int
    init(marque: String, modele: String, ram: Int, stockage: Int, autonomie: Int) {
        self.autonomie = autonomie
        super.init(marque: marque, modele: modele, ram: ram, stockage: stockage)
    }
    func use() {
        autonomie -= 1
    }
} 

Exemple, l’ajout d’une méthode use() pour enlever de la batterie. Un objet de type Macbook pourra l’utiliser, mais pas un objet de la classe Ordinateur.

Override

On peut aussi changer du code dans une méthode avec le mot clé override

class Ordinateur {
    var marque: String
    var modele: String
    var ram: Int
    var stockage: Int
    init(marque: String, modele: String, ram: Int, stockage: Int) {
        self.marque = marque
        self.modele = modele
        self.ram = ram
        self.stockage = stockage
    }
    func useInTrain() {
        print(“Non, votre ordinateur est sur le bureau”)
    }
}
class Macbook: Ordinateur {
    var autonomie: Int
    init(marque: String, modele: String, ram: Int, stockage: Int, autonomie: Int) {
        self.autonomie = autonomie
        super.init(marque: marque, modele: modele, ram: ram, stockage: stockage)
    }
    func use() {
        autonomie -= 1
    }
    override func useInTrain() {
        print(“C’est parti”)
    }
} 

Ici nous avons une méthode pour utiliser l’ordinateur dans le train. Selon si nous avons un ordinateur ou un Macbook, la méthode sera la même mais pas le résultat.

var iMac = Ordinateur(marque: “Apple”, modele: “iMac”, ram: 16, stockage: 128)
var macbook = Macbook(marque: “Apple”, modele: “Macbook pro”, ram: 16, stockage: 128, autonomie: 80)
macbook.use()
macbook.useInTrain()
//C’est parti
iMac.useInTrain()
//Non, votre ordinateur est sur le bureau