018 オブジェクト指向の深化(ポリモーフィズムの応用) 011 解答例

// 抽象クラス LibraryResource
abstract class LibraryResource {
    private boolean checkedOut;

    // コンストラクタ
    public LibraryResource() {
        this.checkedOut = false;
    }

    // checkOut メソッド
    public void checkOut() {
        if (!checkedOut) {
            checkedOut = true;
            System.out.println("Resource checked out successfully.");
        } else {
            System.out.println("Resource is already checked out.");
        }
    }
}

// Book クラス
class Book extends LibraryResource {
    private String title;

    // コンストラクタ
    public Book(String title) {
        this.title = title;
    }

    // オーバーライドされたメソッド
    @Override
    public void checkOut() {
        super.checkOut();
        System.out.println("Book title: " + title);
    }
}

// Magazine クラス
class Magazine extends LibraryResource {
    private String name;

    // コンストラクタ
    public Magazine(String name) {
        this.name = name;
    }

    // オーバーライドされたメソッド
    @Override
    public void checkOut() {
        super.checkOut();
        System.out.println("Magazine name: " + name);
    }
}

// Main クラス
public class Main {
    public static void main(String[] args) {
        // 異なる資料のインスタンスを生成
        LibraryResource book = new Book("Java Programming");
        LibraryResource magazine = new Magazine("Science Today");

        // 資料を貸し出しし、結果を表示
        System.out.println("Checking out a book:");
        book.checkOut();

        System.out.println("\nChecking out a magazine:");
        magazine.checkOut();
    }
}

このプログラムでは、LibraryResource 抽象クラスを作成し、Book クラスと Magazine クラスがそれを継承しています。checkOut メソッドがオーバーライドされ、main メソッドで異なる資料が貸し出されるときの挙動が表示されます。

「018 オブジェクト指向の深化」問題集リスト