코딩하는 털보

OOP - 28 본문

IT Study/JAVA OOP

OOP - 28

이정인 2020. 12. 18. 19:38

객체 지향 프로그래밍

28. 메서드 오버라이딩

  • 오버라이딩
    상위 클래스에 정의된 메서드의 구현 내용이 하위 클래스에서 구현할 내용과 맞지 않는 경우 하위 클래스에서 동일한 이름의 메서드를 재정의할 수 있다.

상위 클래스 Customer

    public int calcPrice(int price) {
        bonusPoint += price*bonusRatio;
        return price;
    }

하위 클래스 VIPCustomer (VIP 할인 추가를 위한 메서드 재정의)

    @Override //애노테이션.. 컴파일러에게 특정한 정보를 제공해주는 역할     
              //@Override는 오버라이딩 정보 제공  
    public int calcPrice(int price) { //오버라이딩 소스 메서드와 선언부가 동일해야 한다
        bonusPoint += price*bonusRatio;
        return price - (int)(price*salesRatio);
    }

만약 객체 상속의 묵시적 형변환(업캐스팅)이 있는 경우에는..

Customer Lee = new VIPCustomer();
Lee.calcPrice(1000);

위의 calcPrice 메서드는 인스턴스의 메서드를 사용한다.
즉, VIPCustomer 클래스에서 재정의된 calcPrice 메서드를 사용한다.(가상함수)

package inheritance;

public class OverridingTest {
    public static void main(String[] args) {

        VIPCustomer Lee = new VIPCustomer();
        Lee.setCustomerID(10010);
        Lee.setCustomerName("이순신");
        Lee.bonusPoint = 20000;

        Customer Kim = new VIPCustomer(); //업캐스팅 
        Kim.setCustomerID(10020);
        Kim.setCustomerName("김유신");
        Kim.bonusPoint = 10000;

        System.out.println(Lee.showCustomerInfo());
        System.out.println(Kim.showCustomerInfo());
        System.out.println(Lee.calcPrice(1000)); //1000-1000*0.1 = 900
        System.out.println(Kim.calcPrice(1000)); //1000-1000*0.1 = 900 가상 메서드 사용
        //동일하게 인스턴스의 메서드를 사용한다.
    }
}
Comments