superの概要
| 親クラスへの参照 JavaScript予約語 | ||
|
super 概要 わかりやすく説明 |
||
|
superの基本的な使い方
以下は、superを使用した基本的な例です。
// 親クラス
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name}が音を出します。`);
}
}
// 子クラス
class Dog extends Animal {
constructor(name, breed) {
super(name); // 親クラスのコンストラクタを呼び出す
this.breed = breed;
}
speak() {
super.speak(); // 親クラスのspeakメソッドを呼び出す
console.log(`${this.name}(${this.breed})が吠えています!`);
}
}
// 使用例
const dog = new Dog("ポチ", "柴犬");
dog.speak();
// 結果:
// ポチが音を出します。
// ポチ(柴犬)が吠えています!
super()を使用して親クラスのコンストラクタを呼び出します。- オーバーライドされた
speakメソッド内で親クラスのspeakを呼び出します。 - コードの再利用性が向上し、メソッドの動作を拡張できます。
superの応用例
以下は、superを活用した応用例です。
// 複数の子クラスで親クラスを継承
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
details() {
return `${this.name}, 年収: ${this.salary}`;
}
}
class Manager extends Employee {
constructor(name, salary, department) {
super(name, salary); // 親クラスのコンストラクタを呼び出す
this.department = department;
}
details() {
return `${super.details()}, 部署: ${this.department}`; // 親クラスのdetailsメソッドを拡張
}
}
// 使用例
const manager = new Manager("佐藤", 800万円, "営業");
console.log(manager.details());
// 佐藤, 年収: 800万円, 部署: 営業
- 親クラスの
detailsメソッドを再利用し、追加情報を付加する形で拡張しています。 - 複数の子クラスで親クラスを継承することで、一貫した構造を保ちながら特化した機能を追加できます。
注意点
- 子クラスのコンストラクタ内で必ず
super()を呼び出す: 親クラスがある場合、super()を呼び出さずにthisを使用するとエラーになります。 - 親クラスを正しく指定する:
superは継承された親クラスを参照します。継承が正しくない場合は動作しません。 - 静的メソッドの
superには注意: 静的メソッド内でsuper.methodNameを使用すると、親クラスの静的メソッドを呼び出します。
よくある質問
- Q: なぜ子クラスのコンストラクタで
super()を呼び出す必要があるのですか? - A: JavaScriptのクラスでは、
thisを使用する前に親クラスのコンストラクタを呼び出す必要があります。これにより、親クラスの初期化処理を正しく継承できます。 - Q:
superはどのような場面で使用されますか? - A: 主に親クラスのコンストラクタやメソッドを呼び出して、子クラスでその機能を拡張または上書きする場合に使用されます。
- Q: 静的メソッド内で
superを使用できますか? - A: はい、静的メソッド内で
super.methodNameを使用することで、親クラスの静的メソッドを呼び出すことができます。
まとめ
superは、クラスの継承において親クラスのコンストラクタやメソッドを呼び出すためのキーワードです。親クラスの機能を効率的に再利用しながら、子クラスの特化した処理を実装する際に役立ちます。
- 子クラスのコンストラクタ内で必ず
super()を呼び出す必要があります。 - 親クラスのメソッドを呼び出すことで、動作を拡張できます。
- 適切に使用することで、コードの再利用性や可読性が向上します。