問題~継承~

表示例と下記の用件を参考に、プログラムを作成しなさい。
■店クラス: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();
											}
										}
									}
								
						























































