My Melody Is Cute JAVA기초 10-1 객체지향프로그래밍 심화
본문 바로가기

개발공부🌷/JAVA

JAVA기초 10-1 객체지향프로그래밍 심화

다형성의 활용 예제

public class ex1 {
    class Coffee{
        int price;

        public Coffee(int price) {
            this.price = price;
        }
    }

    class Americano extends  Coffee {};
    class CaffeLatte extends Coffee {};

    class Customer {
        int money = 50000;

//        void buyCoffee(Americano americano) {
//            money = money - americano.price;
//        }
//
//        void buyCoffee(CaffeLatte caffeLatte) {
//            money = money - caffeLatte.price;
//        }
          매번 새로운 커피를 추가하기엔 번거로움 객체의 다형성을 사용해야한다
        void buyCoffee(Coffee coffee) { //매개변수의 다형성
            money = money - coffee.price;
        }
    }
}

다형성의 특성에 따라 상위 클래스인 Coffee의 타입을 매개변수로 전달받으면

하위클래스 타입의 참조변수면 어느 것이나 매개 변수로 전달될 수 있다

public class ex1 {
    public static void main(String[] args) {
        Customer customer = new Customer();
        customer.buyCoffee(new Americano());
        customer.buyCoffee(new CaffeLatte());

        System.out.println("현재 잔액은 " + customer.money + "원 입니다.");
    }
}
    class Coffee {
        int price;

        public Coffee(int price) {
            this.price = price;
        }
    }

    class Americano extends Coffee {
        public Americano() {
            super(4000); //상위 클래스 Coffee의 생성자를 호출
        }

        public String toString() {
            return "아메리카노";
        } //Object클래스 toString()메서드 오버라이딩
    }

    class CaffeLatte extends Coffee {
        public CaffeLatte() {
            super(5000);
        }

        public String toString() {
            return "카페라떼";
        }
    }

    class Customer {
        int money = 50000;
        
        void buyCoffee(Coffee coffee) { //매개변수의 다형성
            if (money < coffee.price) { //물건 가격보다 돈이 없는 경우
                System.out.println("잔액이 부족합니다.");
                return;
            }
            money = money - coffee.price; //가진돈 - 커피가격
            System.out.println(coffee + "를 구입했습니다.");
        }
    }
    
    //출력값
    아메리카노를 구입했습니다.
    카페라떼를 구입했습니다.
    현재 잔액은 41000원 입니다.

다형성을 사용해서 buycoffee() 메서드의 매개변수로 Coffee 타입을 전달했다

이제 객체를 생성하고 참조변수를 사용할때 Coffee 클래스를 상속받기만 하면

butCoffee(Coffee coffee) 메서드의 매개변수로 전달할 수 있다

 

조상타입 참조변수 = new 자손타입 객체();

  • 다형성 : 상위클래스타입 참조변수로 하위클래스타입 객체를 다루는 것 (타입불일치)
  • 조상 객체로 자손객체를 다루는 경우 조상이 가진 멤버만을 다룰 수 있음
  • 자손 타입의 참조변수로 조상타입의 객체를 가리킬 수 없음 (자손이 다룰수 있는 기능보다 부모가 가진 멤버가 적기때문에 참조변수가 객체에 존재하지 않는 기능을 호출하는 경우에 에러가 발생)

 

 

 

다형성 - 해시넷 (hash.kr)

코딩의 시작, TCP School

 

+이해는 되는데 막상 예제보면 조금 헷갈리는 부분이 있다 계속 복습해야지ㅠ