/ JAVAJUNGSUK

Ch7-27~28. 매개변수 다형성

자바의 정석 기초편

0. 목차



Chapter7. 객체지향 프로그래밍Ⅱ

Ch7 - 27. 매개변수의 다형성

Ch7 - 28. 매개변수의 다형성 예제



Ch7 - 27. 매개변수의 다형성


▶ 다형성의 장점

▷ 다형적 매개변수
▷ 하나의 배열로 여러 종류의 객체 다루기


▶ 다형성 정리

Tv t = new SmartTv(); : 조상 = new 자손();
▷ 참조변수의 형변환(리모콘 바꾸기) : 사용가능한 멤버개수 조절
▷ instanceof 연산자 : 형변환 가능여부 확인


▶ 매개변수의 다형성이란?

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



Ch7 - 28. 매개변수의 다형성 예제


▶ 제품과 구매자 관리

▷ 제품


▷ 제품마다 buy 메서드에 오버라이딩하여 구매자 관리


오버라이딩 → 코드 중복 발생


▷ 제품들의 조상인 Product 클래스를
▷ 다형적 매개변수로 받아 하나의 메서드로 구매자 관리


▶ 예제 클론 코딩

▷ class Product
  • price
  • point(price의 10%)
      public class Product {
          int price;
          int point;
        
          Product() {
          }
        
          Product(int price) {
              this.price = price;
              point = (int) (price / 10.0);
          }
      }
    
▷ class Tv
  • Product 상속
  • super로 price 호출 = 100
  • Object의 toString으로 return “TV”
    class Tv extends Product {
      
        Tv() {
            super(100);
        }
      
        public String toString() {
            return "TV";
        }
    }
    
▷ class Computer
  • Product 상속
  • super로 price 호출 = 200
  • Object의 toString으로 return “Computer”
    class Computer extends Product {
      
        Computer() {
            super(200);
        }
      
        public String toString() {
            return "Computer";
        }
    }
    
▷ class Buyer
  • myMoney, myPoint
  • 제품 price가 myMoney보다 작을 시, 잔액 부족 메세지 출력
  • myMoney에서 price차감
  • myPoint에서 point증가
    class Buyer {
        Buyer() { }
      
        int myMoney = 400;
        int myPoint = 0;
      
        void buy(Product p) {
            if (myMoney < p.price) {
                System.out.println("잔액이 부족합니다.");
                return;
            } else {
                myMoney -= p.price;
                myPoint += p.point;
                System.out.println(p + " 구매를 선택");
            }
        }
    }
    
▷ class Act
  • Buyer 객체 생성
  • b.buy(new Tv()); = Product p = new Tv; = b.buy(p);
    class Act {
        public static void main(String[] args) {
            Buyer b = new Buyer();
              
            b.buy(new Tv());
            b.buy(new Computer());
              
            System.out.printf("잔액은 %d만원 입니다.\n", b.myMoney);
            System.out.printf("잔여 포인트는 %d점 입니다.", b.myPoint);
        }
    }
      
    // console
    TV 구매를 선택
    Computer 구매를 선택
    잔액은 100만원 입니다.
    잔여 포인트는 30 입니다.