抽象メソッドを実装する
出力はどれか。
public class Main {
public static void main(String[] args) {
Shape s = new Square(3);
System.out.println(s.describe());
}
}
abstract class Shape {
abstract double area();
String describe() { return "area=" + area(); }
}
class Square extends Shape {
double side;
Square(double side) { this.side = side; }
double area() { return side * side; }
}
- A
area=9.0 - B
area=9 - C
area=0.0 - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: describe() の中の area() は Square の実装が呼ばれ、3.0 * 3.0 = 9.0 です。double を文字列連結すると 9.0 と表示されます。
- B: area() の戻り値は double なので、文字列にすると 9.0 になり、9 にはなりません。
- C: side には 3 (double なので 3.0) が入っているので、0.0 ではありません。
- D: Square は抽象メソッド area() を実装しているので、具象クラスとしてコンパイルできます。
ポイント
- 抽象クラスは普通のメソッドも持てます。describe の中の area() は、実体 (Square) の実装が呼ばれます。