Qraft(クラフト) 資格・学習クイズアプリ

JavaScript入門 練習問題 25:構文:クラスの継承(extendsとsuperの利用)

次のクラス継承に関するコードを実行したときのコンソールへの出力として正しいものはどれですか?

```javascript
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + 'は音を出します');
}
}

class Dog extends Animal {
speak() {
super.speak();
console.log(this.name + 'は吠えます');
}
}

const dog = new Dog('ポチ');
dog.speak();
```

  1. 1行目: ポチは音を出します、2行目: ポチは吠えます
  2. 1行目: ポチは吠えます、2行目: ポチは音を出します
  3. 1行目: ポチは音を出します、2行目は出力されない
  4. 1行目: ポチは吠えます、2行目は出力されない
  5. superの呼び出しでエラーが発生し何も出力されない

Qraftユーザーの成績:難易度 Dランク(レーティング1113)・正答率 75%(9/12回正解)
レーティングは解いた人の実力と正誤から算出する難しさ(初期値1200)。ランクはその全問題中の順位(S+が最難関、F-が最易)

正解と解説を見る
正解:1行目: ポチは音を出します、2行目: ポチは吠えます

DogクラスのspeakメソッドはまずsuperキーワードでAnimalクラスのspeakメソッドを呼び出し、その後に自身の処理を実行します。そのためAnimalのspeak内の出力が先に、Dog独自の出力が後に表示されます。

【正解の理由】
dog.speak()を呼ぶとDogクラスのspeakが実行され、内部の「super.speak()」でAnimalクラスのspeakメソッドが先に呼び出され「ポチは音を出します」が出力されます。その後、続く行の「ポチは吠えます」が出力されるため、この順序が正しくなります。

【不正解の理由】
• 「1行目: ポチは吠えます、2行目: ポチは音を出します」:super.speak()の呼び出しはDog独自の処理より先に書かれているため、出力順が逆になっている
• 「1行目: ポチは音を出します、2行目は出力されない」:super.speak()呼び出し後もDogのspeak内の処理は継続して実行される
• 「1行目: ポチは吠えます、2行目は出力されない」:super.speak()の呼び出しが省略されるという誤った理解に基づいている
• 「superの呼び出しでエラーが発生し何も出力されない」:親クラスのメソッドをsuperで呼び出すこと自体は正常な構文であり、エラーにはならない

← 前の問題問題一覧次の問題 →
アプリで解いてレーティングを上げる(無料・登録不要)