Le polymorphisme consiste à concevoir des objets pour partager des comportements.

En utilisant l’hértitage , les instances peuvent override les comportements des parents avec du comportement spécifique aux enfants

Le polymorphisme autorise la meme méthode a avoir des comportements différents in two ways: method overriding and method overloading.

Overriding

class VoitureSport extends Voiture {
	public vitesseMax;
	constructor(marque: string, couleur: string, poids: number, prix: number, vitesseMax: number) {
			super(marque)
			super(couleur)
			super(poids)
			super(prix)
			this.vitesseMax = vitesseMax;
	}
// par default on va hériter de toutes les methodes et propriétés de la classe parente

	// SURCHARGE (overriding)
	rouler() {
		console.log("Vroum vrouuuum");
	}
	seGarer() {
// on peux aussi utiliser super pour les méthodes , dans ce cas on va executer la méthode
// de la classe parente puis la suite ...
		super.seGarer();
		console.log('Garée deuxieme fois');
	}
	
}

const ferrari = new VoitureSport('Ferrari', 'Rouge', 1200, 250000, 350)
ferrari.seGarer()
	==> "Garée Garée une deuxieme fois"

overloading

class Voiture {
	// ATTRIBUTS
	public marque: string;
	public couleur: string;
	public poids: number;
	public prix: number;
	constructor(_couleur: string, _poids: number, _prix: number) {
		this.couleur=_couleur;
		this.poids=_poids;
		this.prix=_prix;
	}
	// METHODES
	public function rouler() {
		// do something
		console.log(this.marque + " Vroum")
	}
	public function rouler(vitesseMax: number) {
		// do something
		console.log(`Rouler a ${vitesseMax}km/h`)
	}
	public function seGarer() {
		console.log('Garée');
	}
	
 }