다형성(Polymorphism)

‍김다솔·2021년 4월 14일
0

다형성(Polymorphism)

조상 타입 참조 변수로 자손 타입 객체를 다루는 것
하나가 여러 가지 형태를 가질 수 있는 능력

객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이?

SmartTv s1 = new SmartTv();
Tv t = new SmartTv(); // 타입 불일치

SmartTv s2 = new Tv(); // ERROR
  • s1은 자신의 멤버 뿐만아니라 t의 멤버까지 모두 사용 가능하지만, t는 자신의 멤버만 사용 가능하다.

  • 자손 타입의 참조 변수로 조상 타입의 객체를 가리킬 수 없다.

요약

  • 참조변수의 타입은 인스턴스의 타입과 반드시 일치하지 않아도 된다.
  • 참조변수가 조상타입일 때와 자손타입일 때의 차이는 참조변수로 사용할 수 있는 멤버의 개수이다.
  • 자손타입의 참조변수로 조상타입의 객체를 가리킬 수 없다.

매개변수의 다형성

  1. 다형적 매개변수
  2. 하나의 배열로 여러 종류 객체 다루기
class Product {
	int price, bonusPoint;

	Product(int price) {
		this.price = price;
		bonusPoint = (int) (price / 10.0);
	}
}

class Tv2 extends Product {
	Tv2() {
		super(100); // 조상 생성자의 매개변수
	}
	
	public String toString() {return "TV";}
}

class Computer extends Product {
	public Computer() {
		super(200);
	}
	
	public String toString() {return "COMPUTER";}
}

class Buyer { 
	int money = 1000;
	int bonusPoint = 0;

	// 다형성
	// Product p1 = new Tv();
	// Product p2 = new Computer();
	// Product p3 = new Audio();
	void buy(Product p) { // 다형적 매개변수
		if (money < p.price) {
			System.out.println("잔액부족");
			return;
		}
		money -= p.price;
		bonusPoint += p.bonusPoint;
		System.out.println(p + " 구매 완료"); // p == p.toString()
	}
}

public class c7_9_210414 {
	public static void main(String[] args) {
		Buyer b = new Buyer();

		Product p = new Tv2();
     		b.buy(p);
		// b.buy(new Tv2());
		b.buy(new Computer());

		System.out.println("남은 돈:" + b.money);
		System.out.println("보너스 점수:" + b.bonusPoint);
	}

}
  • 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.
profile
💻🎧⚽

0개의 댓글

관련 채용 정보