015-001-005
ポリモーフィズム:図形描画システム
上級
問題説明
ポリモーフィズム:図形描画システム
この問題では: 抽象クラスShapeを継承したCircleとRectangleクラスを実装し、標準入力から読み取った図形情報をもとにShape配列を構築し、ポリモーフィズムを利用してdraw()とgetArea()を呼び出し、結果を標準出力に表示するプログラムを作成します。
学習目標: ポリモーフィズムを使って異なる型のオブジェクトを統一的に扱う方法を理解する
概要
ポリモーフィズム(多態性)は、同じインターフェースで異なる動作を実現するオブジェクト指向の重要な概念です。親クラス型の変数で子クラスのインスタンスを扱い、実行時に適切なメソッドが呼ばれます。
仕様
抽象親クラスShapeを作成:
- abstractメソッド
draw()(実装なし) - abstractメソッド
getArea():面積を返す(実装なし)
子クラスCircleを作成:
Shapeを継承- privateフィールド
radius(半径) - コンストラクタでradiusを受け取る
draw()を実装:"Drawing Circle with radius: [radius]"を出力getArea()を実装:円の面積を返す(radius × radius × 3.14)
子クラスRectangleを作成:
Shapeを継承- privateフィールド
widthとheight - コンストラクタでwidthとheightを受け取る
draw()を実装:"Drawing Rectangle [width]x[height]"を出力getArea()を実装:矩形の面積を返す(width × height)
Mainクラスで:
- Scannerを使って標準入力から図形数Nと各図形の種類・パラメータを読み取る
- 読み取った情報をもとにCircleまたはRectangleオブジェクトを生成し、Shape配列に格納
- 各要素に対してdraw()を呼び出し
- 各要素の面積を"Area: [area]"形式で出力
入力形式
N
[type] [params]
...
- 1行目:図形の数 N
- 各図形行:
Circle [radius]またはRectangle [width] [height]
出力形式
各図形についてdraw()の結果と面積を順に出力します。
入力例:
2
Circle 5
Rectangle 4 6
出力例:
Drawing Circle with radius: 5
Area: 78.5
Drawing Rectangle 4x6
Area: 24.0
