014-004-007
protectedとテンプレートメソッド
上級
問題説明
protectedとテンプレートメソッド
この問題では: protectedメソッドをオーバーライドしてテンプレートメソッドパターンを実装し、SalesReportとInventoryReportの2種類のレポートを生成するプログラムを作成します。
学習目標: protected修飾子を使ったテンプレートメソッドパターンの基礎を理解する
概要
スーパークラスReportにpublicメソッドgenerate()とprotectedメソッドformatHeader()、formatBody()を定義し、サブクラスSalesReportとInventoryReportがprotectedメソッドをオーバーライドすることで、異なるレポートを生成するプログラムを作成してください。
入力
- 1行目: 売上金額(整数)
- 2行目: 在庫数(整数)
仕様
Reportクラス
public void generate()メソッドを定義するformatHeader()を呼び出してその戻り値を出力するformatBody()を呼び出してその戻り値を出力する
protected String formatHeader()メソッドを定義し、"=== Report ==="を返すprotected String formatBody()メソッドを定義し、"No data"を返す
SalesReportクラス(Reportを継承)
- コンストラクタで売上金額(整数)を受け取る
formatHeader()をオーバーライドし、"=== Sales Report ==="を返すformatBody()をオーバーライドし、"Total sales: $" + 売上金額の形式で返す
InventoryReportクラス(Reportを継承)
- コンストラクタで在庫数(整数)を受け取る
formatHeader()をオーバーライドし、"=== Inventory Report ==="を返すformatBody()をオーバーライドし、"Items in stock: " + 在庫数の形式で返す
Mainクラス
Scannerで売上金額と在庫数を読み込むSalesReportのインスタンスを作成し、generate()を呼び出すInventoryReportのインスタンスを作成し、generate()を呼び出す
出力形式
=== Sales Report ===
Total sales: $<売上金額>
=== Inventory Report ===
Items in stock: <在庫数>
