Java - java.lang.Object クラス


■ページ目次

Top

■java.lang.Object

Top
■toString()メソッド
Top
■商品オブジェクトの文字列化
  1. "AbstractProduct.java"に対して、オブジェクトを文字列化するtoString()メソッドをオーバーライドして作ります。("AbstractProduct.java")
    文字列は、以下の形式に従うようにしてください。
     [商品コード, 商品名, 商品定価]
    
    1. // 1301
    2. // package product;
    3. // 抽象商品クラスです。
    4. // 商品を扱うクラスが持っていなければならないメソッドを提供しています。
    5. public abstract class AbstractProduct {
    6. private String code; // 商品コード
    7. private String name; // 商品名
    8. // 商品オブジェクトを文字列化します。
    9. public String toString() {
    10. return "[" + getCode() + ", " + getName() + ", " + getPrice() + "]";
    11. }
    12. :
    13. }
  2. つぎの"TestProduct.java"を作成し、実行してください。
    1. // 1301 = 1201
    2. // package application;
    3. import product.*;
    4. // 商品クラスをテストするクラスです。
    5. public class TestProduct {
    6. public static void main(String[] args) {
    7. Product p1 = new Product(args[0], args[1], args[2]);
    8. System.out.println("商品のインスタンスを生成しました。 p1 = " + p1);
    9. System.out.println(" code = " + p1.getCode());
    10. System.out.println(" name = " + p1.getName());
    11. System.out.println(" price = " + p1.getPrice());
    12. }
    13. }

    □ 実行結果

    $ java -classpath classes application.TestProduct A001 パソコン 188000
    商品のインスタンスを生成しました。 p1 = [A001, パソコン, 188000]
       code = A001
       name = パソコン
      price = 188000
    
  3. あわせて"DiscountProduct.java""SetProduct.java"にも同様にオブジェクトの文字列かを行うメソッドtoString()をオーバーライドします。
    1. // 1301
    2. // package product;
    3. // 割引商品クラスです。
    4. // ひとつの商品に対するフィールドやフィールドを操作するためのメソッドを
    5. // 提供しています。
    6. public class DiscountProduct extends Product implements DiscountInterface {
    7. private int discount; // 商品割引率
    8. :
    9. // 商品オブジェクトを文字列化します。
    10. public String toString() {
    11. return "[" + getCode() + ", " + getName() + ", " + getPrice() + ", " + getDiscount() + "%]";
    12. }
    13. :
    14. }
    1. // 1301
    2. // package product;
    3. // セット商品クラスです。
    4. // ひとつまたは複数の商品を集めて、割引したものをセット商品として扱います。
    5. // セット商品に対するフィールドやフィールドを操作するためのメソッドを
    6. // 提供しています。
    7. public class SetProduct extends AbstractProduct implements DiscountInterface {
    8. private int discount; // セット商品割引率
    9. private AbstractProduct[] products; // セット商品リスト
    10. :
    11. // セット商品オブジェクトを文字列化します。
    12. public String toString() {
    13. return "[" + getCode() + ", " + getName() + ", " + getDiscount() + ", " + getPrice() + "]";
    14. }
    15. :
    16. }
Top
■equals()メソッド
Top
■hashCode()メソッド
Top
■例
Top
■商品オブジェクトの同値の定義
  1. "AbstractProduct.java"に対して、オブジェクトの同値性を定義するequals()メソッドとhashCode()メソッドをオーバーライドして作ります。("AbstractProduct.java")
    1. // 1302
    2. // package product;
    3. // 抽象商品クラスです。
    4. // 商品を扱うクラスが持っていなければならないメソッドを提供しています。
    5. public abstract class AbstractProduct {
    6. private String code; // 商品コード
    7. private String name; // 商品名
    8. :
    9. // 商品オブジェクトが等しいか否かを判定します。
    10. public boolean equals(Object obj) {
    11. if (this == obj) {
    12. return true;
    13. }
    14. if (obj instanceof AbstractProduct) {
    15. return code.equals(((AbstractProduct)obj).getCode());
    16. }
    17. return false;
    18. }
    19. // 商品オブジェクトのハッシュ・コードを返します。
    20. public int hashCode() {
    21. return code.hashCode();
    22. }
    23. :
    24. }
  2. つぎの"TestProduct.java"を作成し、実行してください。
    1. // 1302
    2. // package application;
    3. // import product.*;
    4. // 商品クラスをテストするクラスです。
    5. public class TestProduct {
    6. public static void main(String[] args) {
    7. Product p1 = new Product(args[0], args[1], args[2]);
    8. System.out.println("商品のインスタンスを生成しました。 p1 = " + p1);
    9. System.out.println(" hash = " + p1.hashCode());
    10. Product p2 = new Product(args[0], args[1], args[2]);
    11. System.out.println("商品のインスタンスを生成しました。 p2 = " + p2);
    12. System.out.println(" hash = " + p2.hashCode());
    13. System.out.println();
    14. System.out.println(" (p1 == p2) = " + (p1 == p2));
    15. System.out.println("p1.equals(p2) = " + (p1.equals(p2)));
    16. }
    17. }

    □ 実行結果

    $ java -classpath classes application.TestProduct A001 パソコン 188000
    商品のインスタンスを生成しました。 p1 = [A001, パソコン, 188000]
       hash = 1984080
    商品のインスタンスを生成しました。 p2 = [A001, パソコン, 188000]
       hash = 1984080
    
       (p1 == p2) = false
    p1.equals(p2) = true
    
Top

inserted by FC2 system