018-001-007

インターフェイスと抽象クラスの連携

上級

問題説明

インターフェイスと抽象クラスの連携

この問題では: Printableインターフェイス・抽象クラスDocument・具象クラスInvoice/Receiptの3層構造を実装し、各クラスのprint()メソッドで指定フォーマットの文字列を標準出力に表示するプログラムを作成します。

学習目標: インターフェイスで契約を定義し、抽象クラスで共通実装を提供し、具象クラスで個別実装を行うという3層構造の設計パターンを理解する

概要

インターフェイス Printable で出力の契約を定義し、抽象クラス Document で共通処理(タイトル管理)を提供し、具象クラス InvoiceReceipt が個別のフォーマットで印刷する仕組みを作成してください。

仕様

Printableインターフェイス

  • void print() メソッドを宣言する

Documentクラス(抽象クラス、Printableを実装)

  • protected String title フィールドを持つ
  • コンストラクタ Document(String title) でタイトルを設定する
  • public String getTitle() メソッドでタイトルを返す
  • print() メソッドは実装しない(抽象メソッドのまま)

Invoiceクラス(Documentを継承

  • private int amount フィールドを持つ
  • コンストラクタ Invoice(String title, int amount) で初期化する
  • print() メソッドで "[Invoice] {title}: ${amount}" 形式で出力する

Receiptクラス(Documentを継承)

  • private String item フィールドを持つ
  • コンストラクタ Receipt(String title, String item) で初期化する
  • print() メソッドで "[Receipt] {title}: {item}" 形式で出力する

Mainクラス

  1. Invoice("Order-001", 5000) を作成して print() を呼ぶ
  2. Receipt("Purchase-001", "Laptop") を作成して print() を呼ぶ
  3. 両方のオブジェクトの getTitle() を呼び出し、"Titles: Order-001, Purchase-001" の形式で出力する

出力形式

[Invoice] Order-001: $5000
[Receipt] Purchase-001: Laptop
Titles: Order-001, Purchase-001

コードを実行してみませんか?

この問題のコードエディタと実行機能を使用するには、ログインしてください。

アカウントをお持ちでない方

新規登録