이전까지 자바에서 객체를 생성할 때는
Thing a = new Thing(); 과 같은 구문을 이용했다.
다형성은 객체지향언어의 특성 중 하나로,
그 중 매개변수의 다형성은
예를들면 부모클래스로부터 상속받은 자식 클래스가 있을 때
Parent a = new Child(); 의 형태로 표현이 가능한 것을 의미한다.
Child a = new Parent(); 형태는 불가
이를 통해 Child, Child2, Parent 등 각기 다른 객체들을
마치 Parent 객체 하나인 양 다룰 수 있다.
package sample;
public class Sample
{
public static void main(String[] args)
{
Buyer a = new Buyer();
a.Buy(new Tv());
a.Buy(new Audio());
a.Buy(new Computer());
a.summary();
}
}
class Product
{
int price;
int bonusPoint;
Product(int price)
{
this.price = price;
bonusPoint = (int)(price/10.0);
}
}
class Tv extends Product
{
Tv()
{
super(100);
}
public String toString()
{
return "Tv";
}
}
class Computer extends Product
{
Computer()
{
super(200);
}
public String toString()
{
return "Computer";
}
}
class Audio extends Product
{
Audio()
{
super(80);
}
public String toString()
{
return "Audio";
}
}
class Buyer
{
int money = 400;
int bonusPoint;
Product[] a = new Product[10];
int i;
void Buy(Product p)
{
if(money < p.price)
{
System.out.println("잔액이 부족하여 구매할 수 없습니다");
}
money -= p.price;
bonusPoint += p.bonusPoint;
a[i++] = p;
System.out.println(p + " 를 구매했습니다");
System.out.println("남은 금액은 " + money + " 입니다");
}
void summary()
{
int i;
String total = "";
for( i=0; i<a.length; i++)
{
if(a[i]==null) break;
total += (i==0) ? "" + a[i]: "," + a[i];
}
System.out.println("최종 적립포인트는 " + bonusPoint + " 입니다");
System.out.println("최종 구매내역은 " + total + " 입니다");
}
}
예제에서는 Product를 상속받은 Tv, Audio, Computer 클래스를
Product라는 하나의 클래스로 묶어
Buyer의 Buy메소드의 매개변수로 사용했다.
'자바 JAVA' 카테고리의 다른 글
toString()메소드 오버라이딩 사용예 (0) | 2021.06.14 |
---|---|
자바 음악파일 재생 단순한 예제 (1) | 2021.06.13 |
상수는 왜 final 예약어로 선언하나요? - 자바 기초 (0) | 2021.06.09 |
생성자 매개변수 다 넘겼는데 객체 만들 때 오류? super() 예약어! (0) | 2021.06.09 |
오버라이딩 overriding 기초 예제 (0) | 2021.06.08 |