複数のオブジェクトを配列として処理


オブジェクトを配列として処理する(1)

//class 배열만들기
---------------------------------------
				->	Product p[] = new Product[3]; //객체배열 생성
Product p1 = new Tv();		->	p[0] = new Tv();
Product p2 = new Computer();	->	p[1] = new Computer();
Product p3 = new Audio();	->	p[2] = new Audio();

//다른 방법
Product[] p = { new Tv(), new Computer(), new Audio };


//기본 배열 만들기
---------------------------------------
//방법 1
int[] array = new int[3];
array[0] = 1;
array[1] = 2;
array[2] = 3;

//방법 2 (선언과 동시에 배열의 크기 지정 및 값 초기화)
int[] array1 = new int[] {1,2,3};

//방법 3 (선언과 동시에 배열의 크기 지정 및 값 초기화)
int[] array2 = {1,2,3};

//방법 4 (선언 후 기본변수에 값 초기화)int는 기본변수 Product는 참조변수
int[] array3;
array3 = {1,2,3}; // 에러
array3 = new int[]{1,2,3};

---------------------------------------

1.祖先タイプの配列には、子孫のオブジェクトを含めることができます。

				->	Product p[] = new Product[3]; //객체배열 생성
Product p1 = new Tv();		->	p[0] = new Tv();
Product p2 = new Computer();	->	p[1] = new Computer();
Product p3 = new Audio();	->	p[2] = new Audio();

ここで、配列は、実際のオブジェクトではなく参照変数(Product)を格納するために使用されます.
配列内の各要素は、インスタンスのアドレス値(Tv、コンピュータ、およびAudio)を格納します.
配列を適用するコード

package chapter7;

      public class Example1_Buyer {

         public static void main(String[] args) {
		
            class Product {
               String name = ""; //제품이름
               int price;	//제품가격
               int bonusPoint;	//보너스 점수
			
               Product(String name, int price, int bonusPoint){	//생성자
                  this.name = name;
                  this.price = price;
                  this.bonusPoint = bonusPoint;
               }
            }
-----------------------------------------------------//class Tv


            class Tv extends Product {
            
               Tv() {
                  this("jmTV",500,50);	//밑에 있는 생성자 호출
               }

               Tv(String name, int price, int bonusPoint) {
                  super(name, price, bonusPoint);	// 조상 생성자 호출
               }
            }
            
-----------------------------------------------------//class Computer


            class Computer extends Product {
            
               Computer() {
                  this("jm컴퓨터",200,20);	//밑에 있는 생성자 호출
               }

               Computer(String name, int price, int bonusPoint) {
                  super(name, price, bonusPoint);	// 조상 생성자 호출
               }
            }
            
-----------------------------------------------------//class Buyer

            class Buyer {	//물건 사는 사람
               int money = 1000;	//소유금액
               int bonusPoint = 0;	//보너스점수
	       Product[] cart = new Product[10]; //장바구니, cart배열 생성
               
               int i=0;
			
               void buy(Product p) {	<---- //자손타입의 인스턴스 넘겨 줄 수 있다!!!
                  money = money - p.price;
                  bonusPoint += p.bonusPoint;
                  cart[i++] = p; // 인스턴스가 넘겨지면 cart배열에 저장
               }
            }
		
=======================================================//결과 확인

            Buyer b = new Buyer();		//Buyer 인스턴스 생성
            System.out.println(b.money);	// 소유금액 1000원
		
		
            Tv tv = new Tv();			//Tv 인스턴스 생성
            Computer com = new Computer();	//Com 인스턴스 생성
            
            
            
            b.buy(tv);	//buy메서드에 tv인스턴스를 넣어서 호출
            System.out.println("소지금 : "+b.money);		//소지금 : 500
            System.out.println("보유 보너스 : "+b.bonusPoint);	//보유 보너스 : 50
            
            
            
            b.buy(com);	//buy메서드에 com인스턴스를 넣어서 호출
            System.out.println("소지금 : "+b.money);		//소지금 : 300
            System.out.println("보유 보너스 : "+b.bonusPoint);	//보유 보너스 : 70
            
            System.out.println(b.cart[0].name); 		// jmTV
            System.out.println(b.cart[1].name); 		// jm컴퓨터


        }

   }

java.util.Vector(オブジェクトストレージクラス)


すべてのタイプのオブジェクトを格納できるクラス

public class Vector extends AbstractList implements List, Cloneable, java.io.Serializable {

   protected Object elementData[];
   ...
}
Vectorクラスには、内部にオブジェクトタイプのオブジェクト配列があり、任意のタイプのオブジェクトを含めることができます.
(Objectクラスはすべてのクラスの親であり、親のタイプとしてサブクラスインスタンスを参照できます)
Vectorクラスはオブジェクトアレイを自動的に管理するので、アレイを直接管理する必要はなく、オブジェクトをVectorに格納して取得する方法を使用すればよい.

Vectorクラスの主な方法

  • Vector()
    Vectorクラスのデフォルト作成者
    デフォルトでは、10個のオブジェクトを格納できるインスタンスを作成します.
    10個以上保存すると自動的にサイズが増加します.
  • boolean add(Object o)
    オブジェクトをVectorに保存する方法
    パラメータはオブジェクトタイプの参照変数であり、どのオブジェクトでもパラメータとして使用できます.
    (任意のタイプのオブジェクトを格納できます.)
    戻り値がbooleanのため、保存に成功するとtrueなどが返されます.
  • boolean remove(Object o)
    Vectorに格納されているオブジェクトを削除します.
    残りの部分はaddメソッドと同じです.
  • boolean isEmpty()
    Vectorが空であるかどうかを確認します.
    空の場合はTrueまたはFalse
  • Object get(int index)
    指定した場所のオブジェクトをインデックスで返します.
    3の場合、4番目に格納されたオブジェクトが返されます.
  • int size()
    実際にVectorに格納されているオブジェクトの個数を整数に戻します.
  • Vectorクラスで置換されたコード

    Prodcut[] cart = new Product[10];
    
    void buy(product p) {
       cart[i++] = p;
    }
    
    -----------------------------------
    
    Vertor cart = new Vector();
    
    void buy(Product p) {
       cart.add(p);
    }
    

    購買リストのコードを出力