抽象メソッドを実装しないサブクラス
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
System.out.println("ok");
}
}
abstract class Animal {
abstract String sound();
}
class Cat extends Animal {
}
- A
okと出力される - B 実行時に例外が発生する
- C コンパイルエラーになる
- D 何も出力されない
正解と解説を見る
正解: C
- A: Cat は abstract ではないのに sound() を実装していないので、コンパイルエラーです。実行まで進まないので、何も出力されません。
- B: コンパイルの時点でエラーになるので、実行時の例外にはなりません。
- C: 具象クラスは継承した抽象メソッドをすべて実装する必要があります。Cat に sound() がないのでコンパイルエラーです (Cat を abstract にする方法もあります)。
- D: コンパイルエラーなので実行できません。
ポイント
- 抽象クラスを継承した具象クラスは、すべての抽象メソッドを実装しなければなりません。
- Cat にも abstract を付ければ、実装しなくてもコンパイルできます。