Programming/Java

[JAVA] 매개변수의 다형성

Supreme_YS 2021. 11. 9. 14:16

* 매개변수의 다형성

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

 

* 장점

1. 다형적 매개변수

2. 하나의 배열로 여러종류 객체 다루기

 

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; // 보너스점수
    
    void buy(TV t) {
    	money -= t.price;
        bonusPoint += t.bonusPoint;
        }
    void buy(Computer c) {
  		money -= c.price;
    	bonusPoint += c.bonusPoint;
    	}
    void buy(Audio a) {
    	money -= a.price;
        bonusPoint += a.bonusPoint;
        }
}
/* 다형성을 고려한 코딩 */

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; // 보너스점수
    
    void buy(Product p) {
    	money -= p.price;
        bonusPoint += p.bonusPoint;
    }
}

- 메서드 하나로 여러가지 자손 객체들을 매개 변수로 사용할 수 있다.

 

package AFTERCH6;

class Product {
    int price;			// 제품의 가격
    int bonusPoint;	// 제품구매 시 제공하는 보너스점수

    Product(int price) {
        this.price = price;
        bonusPoint = (int)(price/10.0);	// 보너스점수는 제품가격의 10%
    }
}

class Tv1 extends Product {
    Tv1() {
        // 조상클래스의 생성자 Product(int price)를 호출한다.
        super(100);		// Tv의 가격을 100만원으로 한다.
    }

    // Object클래스의 toString()을 오버라이딩한다.
    public String toString() { return "Tv"; }
}

class Computer extends Product {
    Computer() { super(200); }

    public String toString() { return "Computer"; }
}

class Buyer {	// 고객, 물건을 사는 사람
    int money = 1000;	  // 소유금액
    int bonusPoint = 0; // 보너스점수

    void buy(Product p) {
        if(money < p.price) {
            System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
            return;
        }

        money -= p.price;            // 가진 돈에서 구입한 제품의 가격을 뺀다.
        bonusPoint += p.bonusPoint;  // 제품의 보너스 점수를 추가한다.
        System.out.println(p + "을/를 구입하셨습니다.");
    }
}

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

        b.buy(new Tv1());
        b.buy(new Computer());

        System.out.println("현재 남은 돈은 " + b.money + "만원입니다.");
        System.out.println("현재 보너스점수는 " + b.bonusPoint + "점입니다.");
    }
}

'Programming > Java' 카테고리의 다른 글

[JAVA STUDY] 8주차 : 인터페이스  (0) 2021.11.23
[JAVA STUDY] 7주차 : 패키지  (0) 2021.11.15
[JAVA] 참조변수의 형변환, Instanceof 연산자  (0) 2021.11.09
[JAVA] 캡슐화, 다형성  (0) 2021.11.08
[JAVA] 제어자  (0) 2021.11.08