Java - 抽象クラス


■ページ目次

Top

■抽象クラス


■抽象商品クラスの作成
  1. Productクラス"Product.java"を抽象化した抽象クラス"AbstractProduct.java"を作ります。
    1. // 1101
    2. // 抽象商品クラスです。
    3. // 商品を扱うクラスが持っていなければならないメソッドを提供しています。
    4. abstract class AbstractProduct {
    5. private String code; // 商品コード
    6. private String name; // 商品名
    7. // 商品コードに値を設定します。
    8. void setCode(String code) {
    9. this.code = code;
    10. }
    11. // 商品コードの値を取得します。
    12. String getCode() {
    13. return this.code;
    14. }
    15. // 商品名に値を設定します。
    16. void setName(String name) {
    17. this.name = name;
    18. }
    19. // 商品名の値を取得します。
    20. String getName() {
    21. return this.name;
    22. }
    23. // 商品定価の値を取得します。
    24. abstract int getPrice() ;
    25. }
  2. 上記抽象クラス"AbstractProduct.java"を継承して"Product.java"を作ります。
    1. // 1101
    2. // 商品クラスです。
    3. // ひとつの商品に対するフィールドやフィールドを操作するためのメソッドを
    4. // 提供しています。
    5. public class Product extends AbstractProduct {
    6. private int price; // 商品定価
    7. // 商品クラスのコンストラクター。
    8. Product(String code, String name, int price) {
    9. setCode(code);
    10. setName(name);
    11. setPrice(price);
    12. }
    13. // 商品クラスのコンストラクター。
    14. Product(String code, String name, String price) {
    15. setCode(code);
    16. setName(name);
    17. setPrice(price);
    18. }
    19. // 商品定価に値を設定します。
    20. void setPrice(int price) {
    21. if (price < 0) {
    22. this.price = 0;
    23. return;
    24. }
    25. this.price = price;
    26. }
    27. // 商品定価に値を設定します。
    28. void setPrice(String price) {
    29. setPrice(Integer.parseInt(price));
    30. }
    31. // 商品定価の値を取得します。
    32. int getPrice() {
    33. return this.price;
    34. }
    35. }
■セット商品クラスの作成
  1. 商品をまとめてディスカウント販売するセット商品クラス"SetProduct.java"を作成してください。
    1. // 1101
    2. // セット商品クラスです。
    3. // ひとつまたは複数の商品を集めて、割引したものをセット商品として扱います。
    4. // セット商品に対するフィールドやフィールドを操作するためのメソッドを
    5. // 提供しています。
    6. public class SetProduct extends AbstractProduct {
    7. private int discount; // セット商品割引率
    8. private AbstractProduct[] products; // セット商品リスト
    9. // セット商品クラスのコンストラクター。
    10. SetProduct(String code, String name, int discount, AbstractProduct[] products) {
    11. setCode(code);
    12. setName(name);
    13. setDiscount(discount);
    14. setProducts(products);
    15. }
    16. // 商品の売値の値を取得します。
    17. int getPrice() {
    18. int price = 0;
    19. for (int i = 0; i < products.length; i++) {
    20. price += products[i].getPrice();
    21. }
    22. return (int)(price * (1 - discount / 100.0));
    23. }
    24. // 商品割引率に値を設定します。
    25. void setDiscount(int discount) {
    26. if (discount < 10 || discount > 100) {
    27. this.discount = 0;
    28. return;
    29. }
    30. this.discount = discount;
    31. }
    32. // 商品割引率に値を設定します。
    33. void setDiscount(String discount) {
    34. setDiscount(Integer.parseInt(discount));
    35. }
    36. // 商品割引率の値を取得します。
    37. int getDiscount() {
    38. return discount;
    39. }
    40. // 商品割引率に値を設定します。
    41. void setProducts(AbstractProduct[] products) {
    42. this.products = products;
    43. }
    44. }
  2. つぎの"TestProduct.java"を作成し、実行してください。
    1. // 1101
    2. // 商品クラスをテストするクラスです。
    3. public class TestProduct {
    4. public static void main(String[] args) {
    5. AbstractProduct[] p = new AbstractProduct[4];
    6. p[0] = new DiscountProduct("A001", "パソコン", 188000, 20);
    7. p[1] = new Product("P001", "プリンター", 24000);
    8. p[2] = new DiscountProduct("C001", "CD-ROM", 6500, 10);
    9. p[3] = new Product("M001", "USBメモリー", 9800);
    10. System.out.println("商品配列のインスタンスを生成しました。 p = " + p);
    11. for (int i = 0; i < p.length; i++) {
    12. System.out.println("商品のインスタンスを生成しました。 p[" + i + "] = " + p[i]);
    13. System.out.println(" code = " + p[i].getCode());
    14. System.out.println(" name = " + p[i].getName());
    15. System.out.println(" price = " + p[i].getPrice());
    16. }
    17. SetProduct s = new SetProduct("SA01", "パソコン・セット", 10, p);
    18. System.out.println("セット商品のインスタンスを生成しました。 s = " + s);
    19. System.out.println(" code = " + s.getCode());
    20. System.out.println(" name = " + s.getName());
    21. System.out.println(" price = " + s.getPrice());
    22. }
    23. }

    □ 実行結果

    $ 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
    
Top
■実習
  1. "クラスの継承"で実習した図形クラス"Zukei.java"を抽象クラス"Zukei.java"にしてください。

    図形クラス階層
    図 図形クラス階層

    "Zukei.java"

    1. abstract class Zukei {
    2. private String name; // 名前
    3. String getName() { // 名前の取得
    4. return name;
    5. }
    6. void setName(String name) { // 名前の設定
    7. this.name = name;
    8. }
    9. abstract double length() ; // 周の長さ
    10. }

    □ 実行結果

    $ java ZukeiTest01
    基準四角 の周の長さ = 400
    基準三角 の周の長さ = 341
    基準丸 の周の長さ = 628
    三角形 の周の長さ = 752
    丸 の周の長さ = 377
    四角形 の周の長さ = 480
    
Top

inserted by FC2 system