継承とは?
JavaScriptの継承は、あるクラス(親クラス)のプロパティやメソッドを別のクラス(子クラス)が引き継ぐ仕組みです。継承を使用することで、共通の機能を持つ複数のクラスを効率的に作成し、コードの再利用性を高めることができます。
extendsキーワードによる継承
JavaScriptでは、extends
キーワードを使ってクラスの継承を行います。extends
を使用することで、親クラス(スーパークラス)からプロパティやメソッドを継承した子クラス(サブクラス)を定義することができます。
extendsを使った継承の基本例
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + " makes a noise.");
}
}
class Dog extends Animal {
speak() {
console.log(this.name + " barks.");
}
}
const dog = new Dog("Rex");
dog.speak(); // "Rex barks."
この例では、Animal
クラスが定義され、そのメソッドspeak
がDog
クラスで継承されています。Dog
クラスはAnimal
クラスを継承しながら、speak
メソッドを独自に上書きしています。
superキーワードの使用
継承を行う際、子クラスから親クラスのコンストラクタやメソッドを呼び出す必要がある場合、super
キーワードを使用します。super
は、親クラスのプロパティやメソッドにアクセスするために使われます。
superを使った親クラスのコンストラクタ呼び出し
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + " makes a noise.");
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // 親クラスのコンストラクタを呼び出し
this.breed = breed;
}
speak() {
console.log(this.name + " barks.");
}
}
const dog = new Dog("Rex", "Labrador");
dog.speak(); // "Rex barks."
console.log(dog.breed); // "Labrador"
この例では、Dog
クラス内でsuper(name)
を使い、親クラスAnimal
のコンストラクタを呼び出してname
プロパティを初期化しています。さらに、Dog
クラスでbreed
という新しいプロパティを追加しています。
メソッドのオーバーライド
子クラスで親クラスのメソッドを上書き(オーバーライド)することができます。オーバーライドすることで、親クラスと同じ名前のメソッドに異なる動作を持たせることが可能です。これにより、継承されたクラスのメソッドをカスタマイズできます。
メソッドのオーバーライドの例
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + " makes a noise.");
}
}
class Dog extends Animal {
speak() {
super.speak(); // 親クラスのspeakメソッドを呼び出し
console.log(this.name + " barks.");
}
}
const dog = new Dog("Rex");
dog.speak();
// "Rex makes a noise."
// "Rex barks."
この例では、Dog
クラスでspeak
メソッドがオーバーライドされていますが、super.speak()
を使って親クラスAnimal
のspeak
メソッドも同時に呼び出しています。
サブクラスでの新しいメソッド追加
子クラス(サブクラス)は、親クラスで定義されていない新しいメソッドを追加することができます。これにより、サブクラス特有の機能を持たせることができ、クラスの機能を拡張することが可能です。
サブクラスでの新しいメソッドの例
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + " makes a noise.");
}
}
class Bird extends Animal {
fly() {
console.log(this.name + " is flying.");
}
}
const bird = new Bird("Parrot");
bird.speak(); // "Parrot makes a noise."
bird.fly(); // "Parrot is flying."
この例では、Bird
クラスがAnimal
クラスを継承し、新しいメソッドfly
を追加しています。Bird
のインスタンスは、親クラスのspeak
メソッドを使うことができるだけでなく、独自のfly
メソッドも利用できます。
まとめ
JavaScriptのextends
キーワードを使うことで、クラスの継承が簡単に行えます。継承を使うことで、コードを再利用しやすくなり、親クラスから共通のプロパティやメソッドを引き継ぐことができます。さらに、super
キーワードを使って親クラスのコンストラクタやメソッドにアクセスし、子クラスでのメソッドのオーバーライドや独自の機能を追加することも可能です。これにより、オブジェクト指向プログラミングがより強力に、効率的に行えるようになります。