Java Silver試験の準備を進めましょう。今回はインターフェースと抽象クラスに関連する問題です。
問題
次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
interface Flyable {
void fly();
}
abstract class Bird implements Flyable {
abstract void makeSound();
}
class Sparrow extends Bird {
void makeSound() {
System.out.println("Chirp");
}
public void fly() {
System.out.println("Flying");
}
}
public class Main {
public static void main(String[] args) {
Sparrow sparrow = new Sparrow();
sparrow.makeSound();
sparrow.fly();
}
}
選択肢
- A. Chirp
- B. Flying
- C. Chirp Flying
- D. コンパイルエラー
答えと解説
回答を見る
答え
C. Chirp Flying
解説
解説のポイント:
- インターフェースの実装
- 抽象クラスとメソッドの実装
このプログラムでは、インターフェースFlyable
を実装し、抽象クラスBird
を継承したSparrow
クラスを用いています。
インターフェースはクラスが実装すべきメソッドを定義しますが、Flyable
にはfly()
メソッドが含まれています。このメソッドはSparrow
クラスで実装されています。
Bird
は抽象クラスであり、makeSound()
という抽象メソッドを持っています。このため、具体的な下位クラスでmakeSound()
メソッドを実装する必要があります。
Sparrow
クラスではmakeSound()
をオーバーライドし、”Chirp”を出力します。さらに、Flyable
インターフェースのfly()
メソッドも実装しており、”Flying”と出力します。
したがって、s.parrowmakeSound()
が”Chirp”を出力し、続くs.parrowfly()
が”Flying”を出力するため、出力結果は “Chirp Flying” となります。