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

// DatabaseConnectionクラス
public class DatabaseConnection {
    // final修飾子を持つconnectメソッド
    public final void connect() {
        System.out.println("データベースへの接続を確立します");
    }
}

// Subclassクラス(DatabaseConnectionクラスを継承したサブクラス)
public class Subclass extends DatabaseConnection {
    // 以下のコードでエラーが発生します
    // サブクラスでfinal修飾子を持つメソッドをオーバーライドしようとしているため
    // エラー: connect() in Subclass cannot override connect() in DatabaseConnection
    // overridden method is final
    // @Override
    // public void connect() {
    //     // 新しい接続手法を追加しようとしても、final修飾子があるためエラーが発生
    //     System.out.println("新しい接続手法");
    // }
}

この例では、DatabaseConnectionクラスにfinal修飾子を持つconnectメソッドがあります。そして、そのクラスを継承したSubclassクラスでconnectメソッドをオーバーライドしようとしています。しかし、connectメソッドがfinal修飾子を持つため、サブクラスでのオーバーライドが制限され、エラーが発生します。

「014 継承」問題集リスト