JavaScript/super
super
編集super は、JavaScript のキーワードで、クラスのメソッドやコンストラクタ内から親クラスのメソッドやプロパティにアクセスするために使用されます。super
は、サブクラスが親クラスの機能を拡張または上書きする際に非常に重要な役割を果たします。特に、クラス継承やコンストラクタの呼び出し時に使われます。
構文
編集super[メソッド名]([引数]); super([引数]);
super
は、親クラスのメソッドやコンストラクタを呼び出すために使用します。通常、super
はクラスのメソッド内で使われ、親クラスのメソッドやコンストラクタを呼び出します。
使用例
編集親クラスのメソッドを呼び出す
編集class Animal { speak() { console.log('Animal makes a sound'); } } class Dog extends Animal { speak() { super.speak(); console.log('Dog barks'); } } const dog = new Dog(); dog.speak(); // Animal makes a sound // Dog barks
この例では、Dog クラスの speak メソッドで、親クラス Animal の speak メソッドを super.speak() を使って呼び出しています。これにより、親クラスの機能を継承しつつ、サブクラスで追加の機能を実行しています。
親クラスのコンストラクタを呼び出す
編集class Animal { constructor(name) { this.name = name; } } class Dog extends Animal { constructor(name, breed) { super(name); // 親クラスのコンストラクタを呼び出す this.breed = breed; } } const dog = new Dog('Rex', 'German Shepherd'); console.log(dog.name); // Rex console.log(dog.breed); // German Shepherd
super
はコンストラクタ内でも使用され、親クラスのコンストラクタを呼び出す際に利用します。Dog クラスのコンストラクタは、親クラス Animal のコンストラクタを呼び出し、name プロパティを初期化しています。
親クラスのメソッドを拡張する
編集class Shape { area() { return 0; } } class Circle extends Shape { constructor(radius) { super(); this.radius = radius; } area() { return Math.PI * this.radius * this.radius; } } const circle = new Circle(5); console.log(circle.area()); // 78.53981633974483
super
を使って親クラスのコンストラクタを呼び出した後、サブクラスで親クラスのメソッドを上書きすることができます。この例では、Shape クラスの area メソッドを Circle クラスで上書きしています。
親クラスのプロパティにアクセスする
編集class Person { constructor(name) { this.name = name; } greet() { console.log(`Hello, my name is ${this.name}`); } } class Employee extends Person { constructor(name, jobTitle) { super(name); this.jobTitle = jobTitle; } greet() { super.greet(); console.log(`I am a ${this.jobTitle}`); } } const emp = new Employee('John', 'Developer'); emp.greet(); // Hello, my name is John // I am a Developer
super
を使って、親クラスのプロパティにもアクセスすることができます。ここでは、Person クラスの name プロパティを Employee クラスで使用しています。
super
は、親クラスのメソッドを呼び出す際に制限があります。例えば、super
はメソッド内でのみ使用でき、クラスの外では使えません。また、super
を使う際には、親クラスに対応するメソッドまたはコンストラクタが存在する必要があります。