Chamando um método sobrescrito em POO em JavaScript
Ao sobrescrever um método, o filho perde
acesso ao método sobrescrito do
pai. No entanto, ainda é possível
acessá-lo. Isso é feito
usando a palavra-chave super,
que se refere à classe pai.
Vamos ver um exemplo de quando podemos precisar de acesso ao método do pai. Suponha que temos a seguinte classe pai:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Suponha que na classe filha sobrescrevemos o método do pai:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('student name error');
}
}
}
Perceba que no método sobrescrito, quando a condição é atendida, essencialmente o código do método do pai é executado. Isso resulta em uma duplicação desnecessária de código.
Podemos evitá-la chamando o método do pai. Vamos fazer isso:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // método do pai
} else {
throw new Error('student name error');
}
}
}
Dado o seguinte 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');
}
}
}
Na classe Employee, corrija e
simplifique o setter de idade, usando
o método original do pai.