Java - 매개변수의 다형성

이정민·2021년 10월 27일
0

매개변수의 다형성

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

package chapter7;

      public class Example1_Buyer {

         public static void main(String[] args) {
		
            class Product {
               int price;	//제품가격
               int bonusPoint;	//보너스 점수
			
               Product(int price, int bonusPoint){	//생성자
                  this.price = price;
                  this.bonusPoint = bonusPoint;
               }
            }
-----------------------------------------------------//class Tv


            class Tv extends Product {
            
               Tv() {
                  this(500,50);	//밑에 있는 생성자 호출
               }

               Tv(int price, int bonusPoint) {
                  super(price, bonusPoint);	// 조상 생성자 호출
               }
            }
            
-----------------------------------------------------//class Computer


            class Computer extends Product {
            
               Computer() {
                  this(200,20);	//밑에 있는 생성자 호출
               }

               Computer(int price, int bonusPoint) {
                  super(price, bonusPoint);	// 조상 생성자 호출
               }
            }
            
-----------------------------------------------------//class Buyer

            class Buyer {	//물건 사는 사람
               int money = 1000;	//소유금액
               int bonusPoint = 0;	//보너스점수
		
			
               void buy(Product p) {	<---- //자손타입의 인스턴스 넘겨 줄 수 있다!!!
                  money = money - p.price;
                  bonusPoint += p.bonusPoint;
               }
            }
		
=======================================================//결과 확인

            Buyer b = new Buyer();		//Buyer 인스턴스 생성
            System.out.println(b.money);	// 소유금액 1000원
		
		
            Tv tv = new Tv();			//Tv 인스턴스 생성
            Computer com = new Computer();	//Com 인스턴스 생성
            
            
            
            b.buy(tv);	//buy메서드에 tv인스턴스를 넣어서 호출
            System.out.println("소지금 : "+b.money);		//소지금 : 500
            System.out.println("보유 보너스 : "+b.bonusPoint);	//보유 보너스 : 50
            
            
            
            b.buy(com);	//buy메서드에 com인스턴스를 넣어서 호출
            System.out.println("소지금 : "+b.money);		//소지금 : 300
            System.out.println("보유 보너스 : "+b.bonusPoint);	//보유 보너스 : 70
            


        }

   }

비슷한 경우

Product p1 = new Tv();
Product p2 = new Computer();
product p3 = new Audio();

void buy(Product p) { }

profile
안녕하세요.

0개의 댓글