Chiamare un metodo sovrascritto in OOP in JavaScript
Quando si sovrascrive un metodo, la classe figlia perde
l'accesso al metodo sovrascritto
della classe genitore. Tuttavia, è comunque possibile accedervi.
Questo viene fatto
utilizzando la parola chiave super,
che fa riferimento alla classe
genitore.
Vediamo un esempio in cui potremmo aver bisogno di accedere al metodo della classe genitore. Supponiamo di avere la seguente classe genitore:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Supponiamo di aver sovrascritto il metodo della classe genitore nella classe figlia:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('student name error');
}
}
}
Si può notare che nel metodo sovrascritto, quando la condizione è soddisfatta, viene essenzialmente eseguito il codice del metodo della classe genitore. Risulta in una duplicazione non necessaria del codice.
Possiamo eliminarla chiamando il metodo della classe genitore. Facciamolo:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // metodo della classe genitore
} else {
throw new Error('student name error');
}
}
}
Considera il seguente codice:
class User {
setAge(age) {
if (age >= 0) {
this.age = age;
} else {
throw new Error('need age more 0');
}
}
}
class Employee {
setAge(age) {
if (age <= 120) {
if (age >= 0) {
this.age = age;
} else {
throw new Error('need age more 0');
}
} else {
throw new Error('need age less 120');
}
}
}
Nella classe Employee correggi
e semplifica il setter dell'età, utilizzando
il metodo originale della classe genitore.