Llamada a un método sobrescrito en POO en JavaScript
Al sobrescribir, la clase hija pierde
acceso al método sobrescrito
del padre. Sin embargo, es posible
obtener acceso al mismo. Esto se hace
usando la palabra clave super,
que hace referencia a la clase padre.
Veamos un ejemplo en el que podríamos necesitar acceso al método de la clase padre. Supongamos que tenemos la siguiente clase padre:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Supongamos que en la clase hija sobrescribimos el método del padre:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('student name error');
}
}
}
Se puede observar que en el método sobrescrito, cuando se cumple la condición, esencialmente se ejecuta el código del método padre. Resulta en una duplicación innecesaria de código.
Podemos eliminarla si llamamos al método del padre. Hagámoslo:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // método del padre
} else {
throw new Error('student name error');
}
}
}
Se da el siguiente código:
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');
}
}
}
En la clase Employee, corrija
simplifique el *setter* de la edad, utilizando
el método original del padre.