//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};
---------------------------------------
-> 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, Computer, 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컴퓨터
}
}
모든 종류의 객체들을 저장할 수 있는 클래스
public class Vector extends AbstractList implements List, Cloneable, java.io.Serializable {
protected Object elementData[];
...
}
Vector 클래스는 위와 같이 내부적으로 Object 타입의 객체 배열을 가지고 있어서 어떠한 종류의 개체도 담을 수 있다.
(Object 클래스는 모든 클래스의 조상이고 조상의 타입으로 자손 인스턴스를 참조할 수 있기 때문에)
Vector클래스는 Object배열을 자동적으로 관리해주기 때문에 배열을 직접 관리해줄 필요 없이 객체를 Vector에 저장하고 읽어오는 메서드만 사용하면 된다.
Vector 클래스의 기본 생성자
기본적으로 10개의 객체를 저장할 수 있는 인스턴스 생성
10개 이상으로 저장 시 자동적으로 크기가 증가된다.
Vector에 객체를 저장하는 메서드
매개변수가 Object 타입의 참조변수라서 어떤객체도 매개변수로 사용할 수 있다.
(어떤타입의 객체든지 저장할 수 있다.)
리턴값은 boolean이기 때문에 저장에 성공하면 true 등 리턴 함
Vector에 저장되어 있는 객체를 제거한다.
나머지는 add메서드와 같다.
Vector가 비어있는지 검사.
비어있으면 True, 아니면 False
인덱스를 통해서 지정된 위치의 객체를 반환한다.
3이면 4번째로 저장된 객체가 반환된다.
Vector에 실제로 저장된 객체의 개수를 정수로 반환한다.
Prodcut[] cart = new Product[10];
void buy(product p) {
cart[i++] = p;
}
-----------------------------------
Vertor cart = new Vector();
void buy(Product p) {
cart.add(p);
}