JavaScriptにおけるオブジェクト指向プログラミングでのオーバーライドされたメソッドの呼び出し
オーバーライドを行うと、子クラスは親クラスのオーバーライドされたメソッドへのアクセスを失います。しかし、依然としてそのメソッドにアクセスすることは可能です。これは、親クラスを指すキーワードsuperを使って行うことができます。
親クラスのメソッドへのアクセスが必要となるかもしれない例を見てみましょう。 以下のような親クラスがあるとします:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
次に、子クラスで親クラスのメソッドをオーバーライドしたとします:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('student name error');
}
}
}
オーバーライドされたメソッド内で条件が満たされた場合、実質的には親クラスのメソッドのコードが実行されていることに気づくでしょう。これは不要なコードの重複を招いています。
親クラスのメソッドを呼び出すことで、この重複を取り除くことができます。やってみましょう:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // 親クラスのメソッド
} else {
throw new Error('student name error');
}
}
}
以下のコードがあります:
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');
}
}
}
Employeeクラスで、年齢セッターを親クラスの元のメソッドを利用して簡略化してください。