014-007-009

finalメソッドとテンプレートメソッドパターン

上級

問題説明

finalメソッドとテンプレートメソッドパターン

この問題では: final修飾子を使ったテンプレートメソッドパターンを実装し、AbstractReportクラスのgenerateReport()メソッドがサブクラスでオーバーライドできないことを確認するプログラムを作成します。

学習目標: finalメソッドの役割とテンプレートメソッドパターンの関係を理解する

概要

継承において、親クラスのメソッドにfinal修飾子を付けると、サブクラスでのオーバーライドが禁止されます。テンプレートメソッドパターンでは、処理の骨格をfinalメソッドで定義し、個々のステップを抽象メソッドとしてサブクラスに委譲します。

仕様

AbstractReport クラス(抽象クラス)

  • finalメソッド generateReport(): 以下の順序で3つのメソッドを呼び出す
    1. collectData() - データ収集
    2. formatData() - データ整形
    3. printReport() - レポート出力
  • 抽象メソッド: collectData(), formatData(), printReport()

SalesReport クラス(AbstractReportを継承)

  • collectData(): "Collecting sales data..." を出力
  • formatData(): "Formatting sales figures..." を出力
  • printReport(): "=== Sales Report ==="、"Total Sales: $50,000"、"Items Sold: 1,200" を出力

InventoryReport クラス(AbstractReportを継承)

  • collectData(): "Scanning inventory database..." を出力
  • formatData(): "Organizing inventory items..." を出力
  • printReport(): "=== Inventory Report ==="、"Total Items: 5,000"、"Low Stock: 23" を出力

Main クラス

  • SalesReportInventoryReportのインスタンスを作成
  • それぞれのgenerateReport()を呼び出す
  • 2つのレポートの間に空行を1行出力する

出力形式

Collecting sales data...
Formatting sales figures...
=== Sales Report ===
Total Sales: $50,000
Items Sold: 1,200

Scanning inventory database...
Organizing inventory items...
=== Inventory Report ===
Total Items: 5,000
Low Stock: 23

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

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

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

新規登録