問題~継承~

表示例と下記の用件を参考に、プログラムを作成しなさい。
■店クラス:Shop
○フィールド
| フィールド名 | commodity |
| 修飾子 | private |
| static | なし |
| final | なし |
| 型 | String[] |
| 説明 | 商品リスト |
| フィールド名 | shopName |
| 修飾子 | private |
| static | なし |
| final | なし |
| 型 | String |
| 説明 | 店名 |
○コンストラクタ
| 修飾子 | public |
| 戻り値 | なし |
| static | なし |
| 引数 | String shopName |
| 処理 | 店名をセットする |
○メソッド
| メソッド名 | getShopName |
| 修飾子 | public |
| static | なし |
| 引数 | なし |
| 戻り値 | String 店名 |
| 処理 | 店名を取得する |
| メソッド名 | getCommodity |
| 修飾子 | public |
| static | なし |
| 引数 | なし |
| 戻り値 | String[] 商品リスト |
| 処理 | 商品リストを取得する |
| メソッド名 | setCommodity |
| 修飾子 | public |
| static | なし |
| 引数 | String[] commodity |
| 戻り値 | なし |
| 処理 | 商品リストを設定する |
| メソッド名 | sell |
| 修飾子 | public |
| static | なし |
| 引数 | int num |
| 戻り値 | なし |
| 処理 | 売る抽象メソッド |
■本屋クラス:BookShop (Shopクラスを継承)
○コンストラクタ
| 修飾子 | public |
| 戻り値 | なし |
| static | なし |
| 引数 | String shopName |
| 処理 | 親クラスのコンストラクタを使用し、店名をセットする |
○メソッド
| メソッド名 | sell |
| 修飾子 | public |
| static | なし |
| 引数 | int num |
| 戻り値 | なし |
| 処理 | 商品リストから引数番目の商品を売る 『○○を売ります』を表示 ※○は、商品リストの引数番目の商品名 |
| メソッド名 | stocks |
| 修飾子 | public |
| static | なし |
| 引数 | String[] commodity |
| 戻り値 | なし |
| 処理 | 引数で渡って来た商品リストを親クラスのフィールドに設定 |
■スーパーマーケットクラス:SuperMarket
○フィールド
| フィールド名 | marketName |
| 修飾子 | private |
| static | なし |
| final | なし |
| 型 | String |
| 説明 | 店名 |
| 修飾子 | public |
| 戻り値 | なし |
| static | なし |
| 引数 | String marketName |
| 処理 | 店名をセットする |
○メソッド
| メソッド名 | stocksShop |
| 修飾子 | public |
| static | なし |
| 引数 | Shop shop |
| 戻り値 | なし |
| 処理 | 仕入れた商品リストを全て表示する。(表示例を参照) |
| メソッド名 | sell |
| 修飾子 | public |
| static | なし |
| 引数 | int num, Shop shop |
| 戻り値 | なし |
| 処理 | shopを利用して、引数(num)番目の商品を売る。 |
■メインクラス:Main
| 処理 | marketName
①「RJC本屋」「RJC靴屋」「RJCマーケット」という名前の、本屋・靴屋・スーパーマーケットを作成する。 ②仕入れる商品(本)を作成 [0]:JavaJavaJava [1]:やさしいよDB [2]:やさしいよJava ③仕入れる商品(靴)を作成 [0]:Javaシューズ [1]:DBシューズ [2]:UMLシューズ ④本屋、靴屋に②③で作成した商品をそれぞれセットする。 ⑤スーパーマーケットに④で商品をセットした「靴屋」と「本屋」をセットし、 商品を全て表示する ⑥商品を売る 本屋 ・・・ リストの1番目の商品を売る 靴屋 ・・・ リストの2番目の商品を売る |
回答
/**
* 店抽象クラス
* @author RJC Human Resource
*/
abstract public class Shop{
/** 商品リスト*/
private String[] commodity;
/** 店名 */
private String shopName;
/**
* コンストラクタ
* 店名をセットする。
* @param shopName 店名
*/
public Shop(String shopName){
this.shopName = shopName;
}
/**
* 店名を取得するメソッド
* @return shopName 店名
*/
public String getShopName(){
return this.shopName;
}
/**
* 商品リストを取得するメソッド
* @return String[] 商品リスト
*/
public String[] getCommodity(){
return this.commodity;
}
/**
* 商品リストを設定するメソッド
* @param commodity 商品リスト
*/
public void setCommodity(String[] commodity){
this.commodity = commodity;
}
/**
* 売るメソッド
* サブクラスは必ず実装すること
*/
abstract void sell(int num)throws Exception;
}
/**
* 本屋クラス
* @author RJC Human Resource
*
*/
public class BookShop extends Shop {
/**
* コンストラクタ
* 店名を設定
* @param shopName 店名
*/
public BookShop(String shopName) {
super(shopName);
}
/**
* 売るメソッド
* 商品リストから引数番目の商品を売る
* @param num 商品番号
*/
public void sell(int num)throws Exception {
if(num > super.getCommodity().length){
throw new Exception("指定した商品はありません。");
}else{
System.out.println(super.getCommodity()[num] + "を売ります");
}
}
/**
* 仕入れるメソッド
* 引数で渡って来た商品リストをフィールドに設定
*/
public void stocks(String[] commodity) {
// フィールドにセット
super.setCommodity(commodity);
}
}
/**
* 靴屋クラス
* @author RJC Human Resource
*
*/
public class ShoesShop extends Shop {
/**
* コンストラクタ
* 店名を設定
* @param shopName 店名
*/
public ShoesShop(String shopName) {
super(shopName);
}
/**
* 売るメソッド
* 商品リストから引数番目の商品を売る
* @param num 商品番号
*/
public void sell(int num)throws Exception {
//指定商品がない場合
if(num > super.getCommodity().length){
throw new Exception("指定した商品はありません。");
}else{
System.out.println(super.getCommodity()[num] + "を売ります");
}
}
/**
* 仕入れるメソッド
* 引数で渡って来た商品リストをフィールドに設定
*/
public void stocks(String[] commodity) {
// フィールドにセット
super.setCommodity(commodity);
}
}
/**
* スーパーマーケットクラス
* @author RJC Human Resource
*/
public class SuperMarket{
/** 店名 */
private String marketName;
/**
* コンストラクタ
* 店名をセットする
* @param shopName 店名
*/
public SuperMarket(String marketName){
this.marketName = marketName;
}
/**
* 商品を表示
* 仕入れた商品リストを全て表示する
* @param shop 店
*/
public void stocksShop(Shop shop){
System.out.println("===== " + shop.getShopName() + "が仕入れた商品リスト =====");
//商品リストを取得
String[] commodity = shop.getCommodity();
//商品リストを全て表示
for(int i = 0; i < commodity.length; i++){
System.out.println(commodity[i]);
}
System.out.println("=======================================\n");
}
/**
* 売るメソッド
* 商品リストから引数番目の商品を売る
* @param num 商品番号
* @param shop 店
*/
public void sell(int num, Shop shop)throws NumberOutOfBoundsException{
shop.sell(num);
}
}
/**
* メインメソッド
* @author RJC Human Resource
*/
public class Main{
public static void main(String[] args){
try{
//本屋を作成
BookShop bookShop = new BookShop("RJC本屋");
//靴屋を作成
ShoesShop shoesShop = new ShoesShop("RJC靴屋");
//スーパーマーケット作成
SuperMarket market = new SuperMarket("RJCマーケット");
//仕入れる商品作成
//本屋用
String[] bookCommodity = new String[3];
bookCommodity[0] = "JavaJavaJava";
bookCommodity[1] = "やさしいよDB";
bookCommodity[2] = "やさしいよJava";
//靴屋用
String[] shoesCommodity = new String[3];
shoesCommodity[0] = "Javaシューズ";
shoesCommodity[1] = "DBシューズ";
shoesCommodity[2] = "UMLシューズ";
//商品を仕入れる
bookShop.setCommodity(bookCommodity);
shoesShop.setCommodity(shoesCommodity);
//それぞれの仕入れた商品を表示
market.stocksShop(bookShop);
market.stocksShop(shoesShop);
//商品を売る
market.sell(1, bookShop);
market.sell(6, shoesShop);
}catch(Exception e){
e.printStackTrace();
}
}
}
























































