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 はメソッド内でのみ使用でき、クラスの外では使えません。また、super を使う際には、親クラスに対応するメソッドまたはコンストラクタが存在する必要があります。

関連項目

編集

参考

編集