ちょっとディープな生物の世界

【JavaScript】クラスの継承とオーバーライド

クラスを継承する

継承とは既にあるクラスの内容を引き継ぐことです。「class 新しいクラス名 extends 継承するクラス名」で継承することができます。

継承すると、継承元メソッドなどを使用することができます。

class Animal{
  constructor(name,food){
    this.name = name;
    this.food = food;
  }
  info(){
    console.log(`好きな食べ物は${this.food}です`);
  }
  greeting(){
    console.log(`私は${this.name}です。よろしくね。`);
    this.info();
  }
}

class Dog extends Animal{
}


const dog = new Dog("ポチ","肉");
dog.greeting();

ただし、子クラスは親クラスからメソッドを呼び出せますが、逆に親クラスが子クラスからメソッドを呼び出すことはできないので注意が必要です。

また、親クラスと子クラスで同名のメソッドがあった場合、実際に実行して呼び出されるのは子クラスのメソッドになります。これは、子クラスのメソッドが親クラスのメソッドを上書きしたと言えます。このことをオーバーライドと呼びます。

メソッドと戻り値

メソッドでも関数と同様に戻り値を記すことができます。

class Animal{
  constructor(name,food,age){
    this.name = name;
    this.food = food; 
    this.age = age;
  }
  info(){
    console.log(`好きな食べ物は${this.food}です`);
  }
  greeting(){
    console.log(`私は${this.name}です。よろしくね。`);
    this.info();
  }
}

class Dog extends Animal{
  humanage(){
     return this.age+13;
  }
}


const dog = new Dog("ポチ","肉",2);
dog.greeting();
const humanage = dog.humanage();
console.log(`イヌの年齢に13足したのは${humanage}です`);

コンストラクタのオーバーライド

コンストラクタの値もオーバーライドすることができますが、ひと手間加える必要があります。子クラスのコンストラクタの1行目にsuper( )と書きます。super()は親のコンストラクタを呼び出しています。親の引数を渡す必要がある場合には、super()内に引数名を記します。

class Animal{
  constructor(name,food,age){
    this.name = name;
    this.food = food; 
    this.age = age;
  }
  info(){
    console.log(`好きな食べ物は${this.food}です`);
  }
}

class Dog extends Animal{
  constructor(name,food,age,color){
     super(name,food,age);
     this.color = color;
  }
   info(){
     console.log(this.name+this.food+this.age+this.color)
   }
}


const dog = new Dog("ポチ","肉",2,"茶");
dog.info();

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です