매개변수의 다형성

Kuno17·2022년 12월 28일
0

Java 기초

목록 보기
4/6
post-thumbnail

참조변수의 다형적 특징은 메서드의 매개변수에도 적용이 된다.

  • 참조타입의 매개변수는 메소드에 접근할때 자신과 같은 타입이거나 또는 자손 타입의 주소를 넘겨준다.
  • 조상의 매개변수로 접근할 수 있으면 자손 타입도 접근할 수 있다.
  • 조상클래스의 매개변수가 있어서 자손 클래스의 매개변수를 접근하기 때문에 코드가 간단해진다. 하지만 접근할 수 있는 매개변수는 조상클래스 멤버변수만 접근이 가능하다.
class Product2 {
    int price;
    int bonusPoint;

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

부모 클래스를 다음과 같이 작성한다. 가격과 포인트를 구하도록 한다.

class Tv2 extends Product2  {
    Tv2() { super(100); }
    public String toString() {return "Tv"; }
}

다음과 같이 Tv()라는 자손클래스로 생성자 내부 클럭안에 super(100)이 있기 때문에 price=100으로 적용된다. 이러한 방법으로

class Buyer2 {
    int money =1000;  //소유금액
    int bonusPoint =0; //보너스 포인트
    Product2[] cart = new Product2[10];
    int i =0;

    void buy(Product2 p){
        if (money < p.price) {
            System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
            return;
        }
        money -=p.price;
        bonusPoint +=p.bonusPoint;
        cart[i++] = p;
        System.out.println(p+"을/를 구입하셨습니다.");
    }

void buy(Product2 p) 메서드에서 매개변수로 Product2 p 는 조상타입의 참조변수를 참조할 수 있다.
즉 어떤 Product2의 this.price 를 불러오는 것이다. 그리고 이러한 메서드를 아래 메인 클래스에서
buy()메서드이 매개변수로 각 상품 메서드를 호출하여 조상메서드의 값을 변경,참조하여 불러오는 것이다.

public class java7_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();

    }
}
profile
자바 스터디 정리 - 하단 홈 버튼 참조.

0개의 댓글