Eredità delle classi in JavaScript

L'eredità è un concetto fondamentale nella programmazione orientata agli oggetti (OOP). Consente di creare nuove classi basate su classi esistenti, con la possibilità di ereditare le proprietà e i metodi della classe padre. In JavaScript l'eredità delle classi funziona in modo diverso rispetto ad altri linguaggi OOP tradizionali. In questa pagina, esploreremo come funziona l'eredità delle classi in JavaScript utilizzando esempi pratici.

Prototipi e catene di prototipi

In JavaScript, ogni oggetto è associato a un prototipo. Quando cerchiamo di accedere a una proprietà di un oggetto, il motore JavaScript cercherà prima quella proprietà nell'oggetto stesso e, se non la trova, la cercherà nel prototipo. Questo concetto è fondamentale per capire come funziona l'eredità delle classi in JavaScript.

Eredità delle classi

Per creare una classe figlia che eredita da una classe padre in JavaScript, possiamo utilizzare la parola chiave extends. Ecco un esempio:

class Persona {
	constructor(nome, cognome) {
		this.nome = nome;
		this.cognome = cognome;
	}

	saluta() {
		console.log(`Ciao, sono ${this.nome} ${this.cognome}.`);
	}
}

class Studente extends Persona {
	constructor(nome, cognome, corso) {
		super(nome, cognome); // Richiama il costruttore della classe padre
		this.corso = corso;
	}

	studia() {
		console.log(`${this.nome} sta studiando ${this.corso}.`);
	}
}

Nell'esempio sopra, abbiamo una classe Studente che eredita dalla classe Persona. Utilizzando super(nome, cognome), richiamiamo il costruttore della classe padre per inizializzare il nome e il cognome dello studente.

Utilizzo di oggetti ereditati

Ora possiamo creare oggetti basati sulla classe Studente e utilizzare sia i metodi ereditati dalla classe Persona che i metodi specifici della classe Studente:

const mario = new Studente("Mario", "Rossi", "Informatica");
mario.saluta(); // Output: Ciao, sono Mario Rossi.
mario.studia(); // Output: Mario sta studiando Informatica.

Come è possibile notare, mario può accedere sia al metodo saluta() ereditato dalla classe Persona che al metodo studia() specifico della classe Studente.

Eredità multipla in JavaScript

JavaScript non supporta l'eredità multipla, il che significa che una classe può ereditare solo da una classe padre. Tuttavia, è possibile creare catene di ereditarietà, in cui una classe eredita da un'altra classe che eredita da un'altra ancora, creando così una catena di prototipi.

class A { /* ... */ }
class B extends A { /* ... */ }
class C extends B { /* ... */ }

L'eredità delle classi in JavaScript è una caratteristica potente che consente di creare classi figlie basate su classi genitore. È importante comprendere il funzionamento delle catene di prototipi e come le proprietà e i metodi sono ereditati e sovrascritti. Questo concetto è fondamentale per la creazione di applicazioni complesse e ben strutturate in JavaScript.