TIL | JAVA 매개변수의 다형성

김윤희·2022년 8월 1일
0

매개변수의 다형성

매개변수의 다형성(다형성의 장점 1 - 다형적 매개변수)


  • 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다
class Product{
	int price; 		// 제품 가격
    int bonusPoint 	// 보너스 점수
}

class Tv extends Product{}
class Computer extends Product{}
class Audio extends Product{}

class Buyer {// 물건 사는 사람
	int money = 1000; 	// 소유 금액
    int bonusPoint = 0;	// 보너스 점수
}
  • Buyer 클래스에 아래의 메서드를 추가하려고 한다면, 메서드의 매개변수는 new Tv();만 가능하기 때문에 new Computer(); / new Audio(); 도 매개변수로 들어올 수 있도록 오버로딩(메서드 이름은 같고 매개변수 타입은 다를때) 해주어야한다
    • 하지만 물건의 개수가 세가지만 있는 것이 아니라 엄청 많은데 모든 것을 새로운 물건이 나올때마다 Buyer 클래스에다 buy 메서드를 작성 해줄 수는 없다
      관리도 힘들고 코드의 중복도 발생한다 !
void buy(Tv t){
	money -= t.price;
    bonusPoint += t.bonusPoint;
}

✔ 해결방법은 위의 코드를 아래로 바꿔준다(매개변수의 타입을 조상타입으로 변경)

void buy(Product p){
	money -= p.price;
    bonusPoint += p.bonusPoint;
}


여러 종류의 객체를 배열로 다루기

매개여러 종류의 객체를 배열로 다루기(다형성의 장점 2 - 하나의 배열로 여러 종류 객체 다루기)


  • 조상타입의 배열에 자손들의 객체를 담을 수 있다
class buyer{	// 물건사는 사람
	int money = 1000;		// 소유 금액
    int bonusPoint = 0;		// 보너스 점수
   
    Product[] cart = new Product[10];	// 구입한 물건을 담을 예정
    
    int i = 0;
    
    void buy (Product p){
    	if(money < p.price){
        	System.out.println("잔액 부족");
            return;
        }
        
        money -= p.price;
        bonusPoint += p.bonusPoint;
        cart[i++] = p;
    }
    
}

0개의 댓글