TypeScript - Eredità
Ciao, futuri programmatori! Oggi ci imbarcheremo in un viaggio entusiasmante nel mondo dell'eredità di TypeScript. Come il vostro amico insegnante di informatica del quartiere, sono qui per guidarvi attraverso questo affascinante argomento. Allora, prendete i vostri zaini virtuali e tuffiamoci!

Cos'è l'Eredità?
Prima di iniziare, cerchiamo di capire cosa significa davvero l'eredità. Immagina di creare un albero genealogico. Ogni nuova generazione eredita determinate caratteristiche dai propri genitori. Nel programming, l'eredità funziona allo stesso modo. Permette a una nuova classe di essere basata su una classe esistente, ereditandone le proprietà e i metodi. Bello, vero?
Eredità Singola
Iniziamo con la forma più semplice di eredità: l'eredità singola. Questo è quando una classe (classe figlia) eredita da un'altra classe (classe padre).
Esempio di Base
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
makeSound(): void {
console.log("Some generic animal sound");
}
}
class Dog extends Animal {
breed: string;
constructor(name: string, breed: string) {
super(name);
this.breed = breed;
}
makeSound(): void {
console.log("Woof! Woof!");
}
}
let myDog = new Dog("Buddy", "Golden Retriever");
console.log(myDog.name); // Output: Buddy
console.log(myDog.breed); // Output: Golden Retriever
myDog.makeSound(); // Output: Woof! Woof!
In questo esempio, Dog eredita da Animal. La parola chiave extends viene utilizzata per creare una classe che è figlia di un'altra classe.
Spiegazione
- Definiamo una classe base
Animalcon una proprietànamee un metodomakeSound. - Poi creiamo una classe
Dogche estendeAnimal. - La classe
Dogha la sua proprietàbreed. - Utilizziamo la parola chiave
supernel costruttore diDogper chiamare il costruttore diAnimal. - Sovrascriviamo il metodo
makeSoundnella classeDog.
Parola Chiave Super
Potreste aver notato la parola chiave super nel nostro esempio precedente. Esploriamo più a fondo cosa fa.
Esempio con Super
class Vehicle {
make: string;
model: string;
constructor(make: string, model: string) {
this.make = make;
this.model = model;
}
getInfo(): string {
return `${this.make} ${this.model}`;
}
}
class Car extends Vehicle {
numDoors: number;
constructor(make: string, model: string, numDoors: number) {
super(make, model);
this.numDoors = numDoors;
}
getInfo(): string {
return `${super.getInfo()} with ${this.numDoors} doors`;
}
}
let myCar = new Car("Toyota", "Corolla", 4);
console.log(myCar.getInfo()); // Output: Toyota Corolla with 4 doors
Spiegazione
- La parola chiave
superviene utilizzata nel costruttore diCarper chiamare il costruttore diVehicle. - Nel metodo
getInfodella classeCar, utilizziamosuper.getInfo()per chiamare il metodogetInfodella classe padre.
La parola chiave super ci permette di accedere e chiamare funzioni su un oggetto del padre.
Sovrascrittura del Metodo
La sovrascrittura del metodo si verifica quando una classe figlia fornisce una implementazione specifica di un metodo già definito nella sua classe padre. Abbiamo visto questo nei nostri esempi precedenti!
Un Altro Esempio di Sovrascrittura del Metodo
class Shape {
getArea(): number {
return 0;
}
}
class Circle extends Shape {
radius: number;
constructor(radius: number) {
super();
this.radius = radius;
}
getArea(): number {
return Math.PI * this.radius * this.radius;
}
}
class Rectangle extends Shape {
width: number;
height: number;
constructor(width: number, height: number) {
super();
this.width = width;
this.height = height;
}
getArea(): number {
return this.width * this.height;
}
}
let myCircle = new Circle(5);
console.log(myCircle.getArea()); // Output: 78.53981633974483
let myRectangle = new Rectangle(4, 5);
console.log(myRectangle.getArea()); // Output: 20
Spiegazione
- Abbiamo una classe base
Shapecon un metodogetAreache restituisce 0. - Entrambe le classi
CircleeRectangleestendonoShapee sovrascrivono il metodogetAreacon le loro proprie implementazioni. - La classe
Circlecalcola l'area utilizzando la formula πr². - La classe
Rectanglecalcola l'area moltiplicando larghezza e altezza.
Eredità Multilivello
L'eredità multilivello coinvolge una classe figlia che eredita da un'altra classe figlia. È come un albero genealogico con più generazioni.
Esempio di Eredità Multilivello
class Grandparent {
surname: string;
constructor(surname: string) {
this.surname = surname;
}
getSurname(): string {
return this.surname;
}
}
class Parent extends Grandparent {
firstName: string;
constructor(firstName: string, surname: string) {
super(surname);
this.firstName = firstName;
}
getFullName(): string {
return `${this.firstName} ${this.getSurname()}`;
}
}
class Child extends Parent {
middleName: string;
constructor(firstName: string, middleName: string, surname: string) {
super(firstName, surname);
this.middleName = middleName;
}
getFullName(): string {
return `${this.firstName} ${this.middleName} ${this.getSurname()}`;
}
}
let myChild = new Child("John", "Doe", "Smith");
console.log(myChild.getFullName()); // Output: John Doe Smith
Spiegazione
- Abbiamo una classe
Grandparentcon una proprietàsurname. - La classe
ParentestendeGrandparente aggiunge una proprietàfirstName. - La classe
ChildestendeParente aggiunge una proprietàmiddleName. - Ogni classe ha la sua implementazione del metodo
getFullName.
Riepilogo dei Metodi di Eredità
Ecco una tabella che riepiloga i metodi e le parole chiave chiave che abbiamo discusso:
| Metodo/Parola Chiave | Descrizione |
|---|---|
extends |
Utilizzato per creare una classe come figlia di un'altra classe |
super() |
Chiama il costruttore della classe padre |
super.method() |
Chiama un metodo dalla classe padre |
| Sovrascrittura del Metodo | Fornire una nuova implementazione per un metodo in una classe figlia |
Eccoci! Abbiamo coperto le basi dell'eredità in TypeScript. Ricorda, la pratica rende perfetti, quindi non esitare a sperimentare con questi concetti. Buon codice, futuri maghi di TypeScript!
Credits: Image by storyset
