- 조상 타입 참조 변수로 자손 타입 객체를 다루는 것
👉 타입 불일치 OK!
예)Tv t = new SmartTv();
- 자손 타입의 참조 변수로 조상 타입 객체를 다룰 수 없다. (∵ 조상 타입의 멤버개수가 더 적기 때문)
사용할 수 있는 멤버의 개수를 조절하는 것
FireEngine f = new Fireengine();
Car c = (Car) f;
// 실제 인스턴스 : 자손, 자손의 참조변수를 형변환하여 조상의 참조변수에 대입
instanceof 연산자
참조변수의 형변환 가능여부 확인에 사용
- 가능하면 true 반환 (상속 계층도의 조상은 true)
메서드의 매개변수로 조상타입의 참조변수를 매개변수로 사용하여, 하나의 메서드로 여러타입의 객체를 받을 수 있다.
void buy (Product p) { }
매개변수 Product p에는 아래의 3문장이 모두 가능하다.
Product p = new Tv();
Product p = new Computer();
Product p = new Audio();
b.buy(new Tv());
//아래코드와 동일한 내용
Product p = new Product;
b.buy(p);
조상타입의 배열에 자손들의 객체를 담을 수 있다.
class Buyer2 { // 고객, 물건을 사는 사람
int money = 1000; // 소유금액
int bonusPoint = 0; // 보너스점수
Product2[] cart = new Product2[10]; // 구입한 제품을 저장하기 위한 배열
int i =0; // Product배열에 사용될 카운터
void buy(Product2 p) {
if(money < p.price) {
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money -= p.price; // 가진 돈에서 구입한 제품의 가격을 뺀다.
bonusPoint += p.bonusPoint; // 제품의 보너스 점수를 추가한다.
cart[i++] = p; // 제품을 Product[] cart에 저장한다.
System.out.println(p + "을/를 구입하셨습니다.");
}
}
class 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();
}
}
👉 조상타입 배열 cart에 다형적 매개변수를 통해 자손들의 객체인 Tv2(), Computer2(), Audio2()를 담을 수 있다.