public class Cart { // 장바구니 클래스
ArrayList<Item> list = new ArrayList<Item>(); // 리스트형 자료구조 ArrayList
void addItem (String name, int num, int unitPrice) {
list.add(new Item(name,num, unitPrice)); // 이너 클래스의 생성자 호출
}
void removeItem(int index) {
list.remove(index);
}
Item getItem(int index) {
return list.get(index);
}
int getItemNum() {
return list.size();
}
int getTotalPrice() {
int total = 0;
for(Item item : list)
total += item.getPrice(); // 이너 클래스의 메소드 호출
return total;
}
void changeItemNumber (int index, int num) {
Item item = list.get(index);
item.num = num; // 이너 클래스의 필드 사용
}
class Item { // 상품항목 클래스 (이너클래스)
String name;
int num;
int unitPrice;
Item (String name, int num, int unitPrice) {
this.name = name;
this.num = num;
this.unitPrice = unitPrice;
}
int getPrice() {
return num*unitPrice;
}
}
}
--------------------------
2) 실행 클래스
public class NestedClassExample1 {
public static void main(String[] args) {
Cart cart = new Cart();
cart.addItem("쵸콜렛", 3, 1000);
cart.addItem("케이크", 1, 25000);
cart.addItem("샴페인", 1, 7000);
Cart.Item item = cart.new Item("꽃다발", 1. 50000); // 인크로징 클래스 외부에서 이너클래스의 객체 생성
cart.list.add(item); // 상품 항목 객체를 생성해서 장바구니에 추가
printCart(cart);
}
static void printCart(Cart cart) {
int num = cart.getItemNum();
System.out.println(" 상품명 수량 단가 금액");
System.out.println("----------------------------------");
for (int cnt = 0; cnt < num; cnt++) {
Cart.Item item = cart.getItem(cnt);
System.out.printf("%3d %5s %5d %7d %7d %n", cnt+1,
item.name, item.num, item.unitPrice, item.getPrice());
}
System.out.println("----------------------------------");
System.out.printf(" 총계 %10d %n",
cart.getTotalPrice());
}
}
---------------------------------------------------------------------------
public class Line { // 직선 클래스
Point point1, point2;
Line(int x1, int y1, int x2, int y2) {
point1 = new Point(x1, y1); // 정적 네스티드 클래스의 생성자 호출
point2 = new Point(x2, y2);
}
void move(int offsetX, int offsetY) {
point1.x += offsetX; // 정적 네스티드 클래스의 필드 사용
point1.y += offsetY;
point2.x += offsetX;
point2.y += offsetY;
}
static class Point { // 점 클래스
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
}
-----------------------------------------------------------------------
public class NestedClassExample2 {
public static void main(String[] args) {
Line line = new Line(0, 0, 100, 100);
line.move(10, 20);
printPoint(line.point1);
printPoint(line.point2);
}
static void printPoint(Line.Point point) {
// 인클로징 클래스 외부에서 정적 네스티드 클래스 사용할 때에는 [인클로징 클래스 이름.]을 클래스명 앞에 붙여줌.
System.out.printf("(%d, %d) %n", point.x, point.y);
}
}
'자바의 기초문법' 카테고리의 다른 글
멀티스레드 프로그래밍: Thread, Runnable (0) | 2015.12.28 |
---|---|
객체의 직렬화와 역직렬화 (0) | 2015.12.28 |
파일 입출력 기능과 성능을 향상시키는 클래스들 (0) | 2015.12.28 |
파일 입출력 클래스: FileReader, FileWriter, FileInputStream, FileOutputStream (0) | 2015.12.28 |
HashMap를 이용하여 사원명과 실적을 입력, 출력하는 문제 (0) | 2015.12.23 |