018-001-007
インターフェイスと抽象クラスの連携
上級
問題説明
インターフェイスと抽象クラスの連携
この問題では: Printableインターフェイス・抽象クラスDocument・具象クラスInvoice/Receiptの3層構造を実装し、各クラスのprint()メソッドで指定フォーマットの文字列を標準出力に表示するプログラムを作成します。
学習目標: インターフェイスで契約を定義し、抽象クラスで共通実装を提供し、具象クラスで個別実装を行うという3層構造の設計パターンを理解する
概要
インターフェイス Printable で出力の契約を定義し、抽象クラス Document で共通処理(タイトル管理)を提供し、具象クラス Invoice と Receipt が個別のフォーマットで印刷する仕組みを作成してください。
仕様
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クラス
Invoice("Order-001", 5000)を作成してprint()を呼ぶReceipt("Purchase-001", "Laptop")を作成してprint()を呼ぶ- 両方のオブジェクトの
getTitle()を呼び出し、"Titles: Order-001, Purchase-001"の形式で出力する
出力形式
[Invoice] Order-001: $5000
[Receipt] Purchase-001: Laptop
Titles: Order-001, Purchase-001
