サイトロゴ
問題~継承~


表示例と下記の用件を参考に、プログラムを作成しなさい。

■店クラス: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(); } } }