継承に関する問題です。
1.クラス図の作成
次のクラス仕様書を元にクラス図を作成しなさい。
なお、以下のいずれのクラスのメソッドにも引数列はない。
スーパークラス Goods
役割:商品を表現する。
フィールド
フィールド名 | アクセス修飾子 | 型 | 役割 |
name | protected | String | 商品名を保持する |
price | protected | int | 価格を保持する |
コンストラクタ
役割:フィールドを初期化する。
メソッド
メソッド名 | アクセス修飾子 | 戻り値の型 | 役割 |
show() | public | void | 商品名と価格を出力する(例.商品名:〇〇 価格:×× ) |
getPrice() | public | int | フィールドpriceを返す |
サブクラス1 Clothes extends Goods
役割:商品の一種である衣服を表現する。
フィールド
フィールド名 | アクセス修飾子 | 型 | 役割 |
color | private | String | 色を保持する(例:白、黒、赤、青) |
size | private | String | サイズを保持する(例:S,M,L,LL) |
コンストラクタ
役割:フィールドを初期化する。
メソッド
メソッド名 | アクセス修飾子 | 戻り値の型 | 役割 |
show() | public | void | 商品名と価格、色とサイズを出力する(例.商品名:〇〇 価格:×× 色:〇〇 サイズ:××) |
サブクラス2 Computer extends Goods
役割:商品の一種であるコンピューターを表現する。
フィールド
フィールド名 | アクセス修飾子 | 型 | 役割 |
osType | private | String | OSタイプを保持する(例:Windows、Mac、Linux) |
memory | private | int | メモリ容量を保持する(例:256、512) |
コンストラクタ
役割:フィールドを初期化する。
メソッド
メソッド名 | アクセス修飾子 | 戻り値の型 | 役割 |
show() | public | void | 商品名と価格、OSタイプとメモリ容量を出力する(例.商品名:〇〇 価格:×× OSタイプ:〇〇 メモリ:××) |
2.クラス図を実装
上記問題で作成したクラス図を基にJavaで実装しなさい。
その際はできるだけ差分プログラミングによりサブクラスの記述を少なくすること。
オブジェクト配列を使ってポリモーフィズムを実感すること。
(すべてのインスタンスのshow()メソッドを使う。また、合計金額も求めること)
※ヒント:スーパークラスのメソッドをサブクラスで呼び出すには、super.メソッド名()と書きます。
<メインメソッドの例>
<アウトプット例>
----------------- 商品名:ハンカチ 価格:750 ----------------- 商品名:パソコンA 価格:100000 OSタイプ:Win2004 メモリ容量:256 ----------------- 商品名:パソコンB 価格:150000 OSタイプ:WinYP メモリ容量:516 ----------------- 商品名:Jeans390 価格:4000 色:青 サイズ:LL ---------------------------- 合計金額:254750円 |
3.toStringメソッドのオーバーライド
上記2で作成した3つのクラスにObjectクラスのtoStringメソッドをオーバーライドしなさい。
その上でtoStringメソッドを活用して上記Q02.java と同じ動作をするようにしなさい。
※なお、クラス名の衝突を避けるため以下の例ではGoods1のようにクラス名の後ろに1を補っている。
この例のように、プログラムのアウトプットを変えずにソースコードの内部構造を整理することをリファクタリング(refactoring)といいます。
4.equalsメソッドのオーバーライド
上記3で作成したGoods1クラスにObjectクラスのequalsメソッドとhashCodeメソッドをオーバーライドしたGoods2クラスを作成しなさい。
IDEの便利機能を使うこと。
なお、商品名さえ同じであればequalsメソッドはtrueを返すように実装しなさい。
hashCodeメソッドはIDEの提案をそのまま受け入れること。
※なお、クラス名の衝突を避けるため全てのクラス名の後ろに2を補っている。
<結果>
true false |
5.Randomクラスの継承
java.util.Randomクラスを継承して6面から成るサイコロクラスを作成しなさい。
クラス Dice
役割:サイコロを表現する。
フィールド
フィールド名 | アクセス修飾子 | 型 | 役割 |
FACE | private | int | 面の数を保持する定数 |
num | private | int | 出目を保持する |
コンストラクタ
役割:フィールドnumを1~FACEのランダムな値で初期化する。
メソッド
メソッド名 | アクセス修飾子 | 戻り値の型 | 役割 |
rollTheDice() | public | int | 出目の値を返す |
theDice() | public | void | 出目の値を表示する |
<テストクラスの例>
<結果の例>
3 3 |
6.オリジナルクラスの作成
上記問題で作成したクラス図にオリジナルクラスを書き加えなさい。
例:自動車、椅子、スマートフォンなど。
(ホワイトボードにスーパークラスとオリジナルクラスを書く)
7.オリジナルクラスの実装
上記問題で作成したオリジナルクラス図を基にJavaで実装しなさい。
2.と同様の実行をすること。
(ペア・プログラミング)
8.オリジナル問題作成
将来の後輩のために良い問題が出来たら教えてください。
以上。