014 継承(finalメソッド) 035 解答例

// Shapeクラス
public class Shape {
    // final修飾子を持つcalculateAreaメソッド
    public final double calculateArea() {
        // 各形状に固有の面積計算
        return 0.0; // 仮の戻り値、実際には形状ごとに計算が必要
    }
}

// Circleクラス(Shapeクラスを継承したサブクラス)
public class Circle extends Shape {
    // 以下のコードでエラーが発生します
    // サブクラスでcalculateAreaメソッドをオーバーライドしようとしているため
    // エラー: calculateArea() in Circle cannot override calculateArea() in Shape
    // overridden method is final
    @Override
    public double calculateArea() {
        // 新しい計算方法を追加しようとしても、final修飾子があるためエラーが発生
        return 0.0;
    }
}

この例では、Shapeクラスにfinal修飾子を持つcalculateAreaメソッドを作成し、それを継承したCircleクラスでオーバーライドしようとしています。しかし、calculateAreaメソッドがfinal修飾子を持つため、サブクラスでのオーバーライドが禁止され、コンパイルエラーが発生します。

「014 継承」問題集リスト