- // 1101
- // 抽象商品クラスです。
- // 商品を扱うクラスが持っていなければならないメソッドを提供しています。
- abstract class AbstractProduct {
- private String code; // 商品コード
- private String name; // 商品名
- // 商品コードに値を設定します。
- void setCode(String code) {
- this.code = code;
- }
- // 商品コードの値を取得します。
- String getCode() {
- return this.code;
- }
- // 商品名に値を設定します。
- void setName(String name) {
- this.name = name;
- }
- // 商品名の値を取得します。
- String getName() {
- return this.name;
- }
- // 商品定価の値を取得します。
- abstract int getPrice() ;
- }
- // 1101
- // 商品クラスです。
- // ひとつの商品に対するフィールドやフィールドを操作するためのメソッドを
- // 提供しています。
- public class Product extends AbstractProduct {
- private int price; // 商品定価
- // 商品クラスのコンストラクター。
- Product(String code, String name, int price) {
- setCode(code);
- setName(name);
- setPrice(price);
- }
- // 商品クラスのコンストラクター。
- Product(String code, String name, String price) {
- setCode(code);
- setName(name);
- setPrice(price);
- }
- // 商品定価に値を設定します。
- void setPrice(int price) {
- if (price < 0) {
- this.price = 0;
- return;
- }
- this.price = price;
- }
- // 商品定価に値を設定します。
- void setPrice(String price) {
- setPrice(Integer.parseInt(price));
- }
- // 商品定価の値を取得します。
- int getPrice() {
- return this.price;
- }
- }
クラス | 役割 | オブジェクト |
---|---|---|
Product | 商品の情報を持つ | パソコン |
DiscountProduct | 割引商品の情報を持つ | CD-ROMドライブ |
SetProduct | セット商品の情報を持つ | パソコンのセット(パソコンとCD-ROMドライブ) |
TestProduct | テストするためのアプリケーション | - |
フィールド | 役割 | 値の例 |
---|---|---|
discount | 値引き率(単位%), 0~100の整数値 | 20 |
products | AbstractProduct配列として、各商品を管理します | AbstractProduct のインスタンス |
メソッド | 役割 | 戻り値 | 引数 |
---|---|---|---|
getPrice | 割引後の価格(売価)を取得する | 売価 | なし |
getDiscount | 値引き率を取得する | 値引き率 | なし |
setDiscount | 値引き率を設定する | なし | 値引き率 |
setProducts | 商品セットを設定する | なし | 商品配列 |
- // 1101
- // セット商品クラスです。
- // ひとつまたは複数の商品を集めて、割引したものをセット商品として扱います。
- // セット商品に対するフィールドやフィールドを操作するためのメソッドを
- // 提供しています。
- public class SetProduct extends AbstractProduct {
- private int discount; // セット商品割引率
- private AbstractProduct[] products; // セット商品リスト
- // セット商品クラスのコンストラクター。
- SetProduct(String code, String name, int discount, AbstractProduct[] products) {
- setCode(code);
- setName(name);
- setDiscount(discount);
- setProducts(products);
- }
- // 商品の売値の値を取得します。
- int getPrice() {
- int price = 0;
- for (int i = 0; i < products.length; i++) {
- price += products[i].getPrice();
- }
- return (int)(price * (1 - discount / 100.0));
- }
- // 商品割引率に値を設定します。
- void setDiscount(int discount) {
- if (discount < 10 || discount > 100) {
- this.discount = 0;
- return;
- }
- this.discount = discount;
- }
- // 商品割引率に値を設定します。
- void setDiscount(String discount) {
- setDiscount(Integer.parseInt(discount));
- }
- // 商品割引率の値を取得します。
- int getDiscount() {
- return discount;
- }
- // 商品割引率に値を設定します。
- void setProducts(AbstractProduct[] products) {
- this.products = products;
- }
- }
- // 1101
- // 商品クラスをテストするクラスです。
- public class TestProduct {
- public static void main(String[] args) {
- AbstractProduct[] p = new AbstractProduct[4];
- p[0] = new DiscountProduct("A001", "パソコン", 188000, 20);
- p[1] = new Product("P001", "プリンター", 24000);
- p[2] = new DiscountProduct("C001", "CD-ROM", 6500, 10);
- p[3] = new Product("M001", "USBメモリー", 9800);
- System.out.println("商品配列のインスタンスを生成しました。 p = " + p);
- for (int i = 0; i < p.length; i++) {
- System.out.println("商品のインスタンスを生成しました。 p[" + i + "] = " + p[i]);
- System.out.println(" code = " + p[i].getCode());
- System.out.println(" name = " + p[i].getName());
- System.out.println(" price = " + p[i].getPrice());
- }
- SetProduct s = new SetProduct("SA01", "パソコン・セット", 10, p);
- System.out.println("セット商品のインスタンスを生成しました。 s = " + s);
- System.out.println(" code = " + s.getCode());
- System.out.println(" name = " + s.getName());
- System.out.println(" price = " + s.getPrice());
- }
- }
□ 実行結果
$ java TestProduct 商品配列のインスタンスを生成しました。 p = [LAbstractProduct;@affc70 商品のインスタンスを生成しました。 p[0] = DiscountProduct@1e63e3d code = A001 name = パソコン price = 150400 商品のインスタンスを生成しました。 p[1] = Product@1004901 code = P001 name = プリンター price = 24000 商品のインスタンスを生成しました。 p[2] = DiscountProduct@1b90b39 code = C001 name = CD-ROM price = 5850 商品のインスタンスを生成しました。 p[3] = Product@18fe7c3 code = M001 name = USBメモリー price = 9800 セット商品のインスタンスを生成しました。 s = SetProduct@1a8c4e7 code = SA01 name = パソコン・セット price = 171045
図 図形クラス階層
- abstract class Zukei {
- private String name; // 名前
- String getName() { // 名前の取得
- return name;
- }
- void setName(String name) { // 名前の設定
- this.name = name;
- }
- abstract double length() ; // 周の長さ
- }
□ 実行結果
$ java ZukeiTest01 基準四角 の周の長さ = 400 基準三角 の周の長さ = 341 基準丸 の周の長さ = 628 三角形 の周の長さ = 752 丸 の周の長さ = 377 四角形 の周の長さ = 480