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