① instanceof 연산자
- 참조변수의 형변환 가능여부 확인에 사용. 가능하면 true를 반환한다.
- 반드시 형변환 전에 instanceof로 확인해야 함.
FireEngine fe=new FireEngine();
System.out.println(fe instanceof Object);
System.out.println(fe instanceof Car);
System.out.println(fe instanceof FireEngine); //fe의 조상이라는 전제 하에 전부 true 반환.
Object obj=(Object)fe; //ok
Car c=(Car)fe; //ok
② 매개변수의 다형성
- 참조형 매개변수는 메서드 호출 시, 자신과 같은 타입 또는 자손 타입의 인스턴스를 넘겨줄 수 있다.
- 하나의 배열로 여러 종류 객체를 다룰 수 있다.
class Product{
int price;
int bonusPoint;
Product(int price){
this.price=price;
bonusPoint=(int)(price/10.0);
}
}
class Tv1 extends Product{
Tv1(){
super(100);
}
public String toString(){return "Computer";}
}
class Buyer{
int money=1000;
int bonusPoint=0;
void buy(Product p){
if(money<p.price){
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money-=p.price;
bonusPoint+=p.bonusPoint;
System.out.println(p+"을/를 구입하셨습니다.");
}
}
class JavaJungsuk_basic_Ex7_8{
public static void main(String args[]){
Buyer b=new Buyer();
b.buy(new Tv1());
b.buy(new Computer());
System.out.println("현재 남은 돈은 "+b.money+"만원입니다.");
System.out.println("현재 보너스점수는 "+b.bonusPoint+"점입니다.");
}
}
결과
Tv을/를 구입하셨습니다.
Computer을/를 구입하셨습니다.
현재 남은 돈은 700만원입니다.
현재 보너스점수는 30점입니다.
→ void buy(Product p) 메서드에서 Product p는 new Tv1()과 new Computer()이다.
→ Product p=new Tv1();
b.buy(p); 를 한 줄로 줄여서 b.buy(new Tv1()); 와 같이 표현할 수 있다.
③ 여러 종류의 객체를 배열로 다루기
Product p1=new Tv();
Product p2=new Computer();
Product p3=new Audio();
//위의 코드를 Product타입의 참조변수 배열로 바꾸면 아래와 같다.
Product[] p=new Product[3];
p[0]=new Tv();
p[1]=new Computer();
p[2]=new Audio();
class Product2{
int price;
int bonusPoint;
Product2(int price){
this.price=price;
bonusPoint=(int)(price/10.0);
}
Product2(){}
}
class Tv2 extends Product2{
Tv2(){ super(100) };
public String toString(){return "Computer";}
}
class Computer2 extends Product2{
Computer2(){ super(200); }
public String toString(){return "Computer";}
}
class Audio2 extends Product2{
Audio2(){ super(50); }
public String toString(){return "Audio";}
}
class Buyer2{
int money=1000;
int bonusPoint=0;
Product2[] cart=new Product2[10];
int i=0;
void buy(Product2 p){
if(money<p.price){
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money-=p.price;
bonusPoint+=p.bonusPoint;
cart[i++]=p;
System.out.println(p+"을/를 구입하셨습니다.");
}
void summary(){
int sum=0;
String itemList="";
for(int i=0; i<cart.length; i++){
if(cart[i]==null) break;
sum+=cart[i].price;
itemList+=cart[i]+", ";
}
System.out.println("구입하신 물품의 총 금액은 "+sum+"만원입니다.");
System.out.println("구입하신 제품은 "+itemList+"입니다.");
}
}
class JavaJungsuk_basic_Ex7_9{
public static void main(String args[]){
Buyer2 b=new Buyer2();
b.buy(new Tv2());
b.buy(new Computer2());
b.buy(new Audio2());
b.summary();
}
}
결과
Tv을/를 구입하셨습니다.
Computer을/를 구입하셨습니다.
Audio을/를 구입하셨습니다.
구입하신 물품의 총 금액은 350만원입니다.
구입하신 제품은 Tv, Computer, Audio, 입니다.
→ 구입한 제품을 저장하기 위한 배열(cart)을 만들어 객체 배열을 이용하여 제품을 구입하고 구입한 제품과 총금액을 출력하는 코드이다.
→ 구입한 제품 목록의 마지막에 출력되는 , 가 거슬린다면
itemList += cart[i] + ", ";를 itemList += (i==0) ? "" + cart[i] : ", " + cart[i];와 같이 변경하면 된다.
'프로그래밍 > Java' 카테고리의 다른 글
Java_객체지향언어(9)_인터페이스 (0) | 2022.11.27 |
---|---|
Java_객체지향언어(8)_추상 클래스, 추상 메서드 (0) | 2022.11.20 |
Java_객체지향언어(6)_다형성, 참조변수의 형변환 (0) | 2022.11.15 |
Java_객체지향언어(5)_참조변수 super, 생성자 super(), 제어자와 접근제어자 (0) | 2022.11.09 |
Java_객체지향언어(4)_상속, 포함관계, 오버라이딩 (0) | 2022.11.07 |