Javaの勉強9 抽象クラス

最終更新:2006/06/20

トップページへ戻る
前へ 次へ
9-1. 抽象クラスの作成
    ・抽象クラスは以下のものを持つことができます。
      フィールド
      コンストラクタ
      抽象メソッド
      具象メソッド

    ・構文
      [抽象クラス]
        abstract class クラス名 {
        }
      [抽象メソッド]
        abstract 戻り値型 メソッド名(引数);

      ファイル名はAbstractProduct.javaで保存して、コンパイルだけを行ってください。
// 抽象商品クラス
abstract class AbstractProduct {
    private String code;    // 商品コード
    private String name;    // 商品名
    private int price;      // 商品定価

    // 商品コードの値を設定
    void setCode(String code) {
        this.code = code;
    }

    // 商品コードの値を取得
    String getCode() {
        return this.code;
    }

    // 商品名に値を設定
    void setName(String name) {
        this.name = name;
    }

    // 商品名の値を取得
    String getName() {
        return this.name;
    }

    // 商品定価に値を設定
    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;
    }
}

9-2. 商品クラスの再作成

      ファイル名はProduct.javaで保存して、コンパイルだけを行ってください。
// 商品クラス
class Product extends AbstractProduct {
    // コンストラクタ
    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);
    }
}

9-3. セット商品クラスの作成

      ファイル名はSetProduct.javaで保存して、コンパイルだけを行ってください。
// セット商品クラス
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;
    }

    // 商品割引率を取得
    int getDiscount() {
        return discount;
    }

    // 商品配列に値を設定
    void setProducts(AbstractProduct[] products) {
        this.products = products;
    }
}

9-4. 動作確認

      ファイル名はTestProduct.javaで保存し、コンパイルと実行を行ってください。
class TestProduct {
    public static void main(String[] args) {
        AbstractProduct[] p = new AbstractProduct[4];
        p[0] = new DiscountProduct("0001","PHP基礎編",10000,20);
        p[1] = new Product("0002","Smarty編",20000);
        p[2] = new DiscountProduct("0003","中級実務編",30000,10);
        p[3] = new Product("0004","セキュリティ編",40000);

        for ( int i = 0; i < p.length; 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("SET01","PHPマスターコース",10,p);
        System.out.println(" code = " + s.getCode());
        System.out.println(" name = " + s.getName());
        System.out.println(" price = " + s.getPrice());
    }
}
      実行結果
 code = 0001
 name = PHP基礎編
 price = 8000
 code = 0002
 name = Smarty編
 price = 20000
 code = 0003
 name = 中級実務編
 price = 27000
 code = 0004
 name = セキュリティ編
 price = 40000
 code = SET01
 name = PHPマスターコース
 price = 85500
トップページへ戻る
前へ 次へ
Copyright© 2005- Naoyuki Sano. All rights reserved.