상세 컨텐츠

본문 제목

메서드 재정의 하기 (overriding)

JAVA

by 본투비곰손 2022. 7. 23. 16:12

본문

728x90

하위 크래스에서 메서드 재정의 하기
- 오버라이딩 : 상위 클래스에서 정의된 메서드의 구현 내용이 하위 클래스에서 구현할 내용과 맞지 않는 경우 하위 클래스에서 동일 한이름의 메서드를 재정의 할 수 있다.
- VIPCustomer클래스의 clacPrice()는 할인율이 적용되지 않았기 때문에 오버라이딩하여 재정의하여 구현 한다.

package ch04;

public class VIPCustomer extends Customer {
		
	double salesRatio;
	String agentID;
	
	public VIPCustomer() {
		
		customerGrade ="VIP";
		salesRatio = 0.1;
		bonusRatio = 0.05;
		
		System.out.println("VIPCustomer()call");
	}

	@Override // @Override 를 사용하여 Customer에서 사용한 calcPrice 메서드를 오버라이딩됨을 주석으로 적어준다.
	public int calcPrice(int price) {
		bonusPoint += price * bonusRatio; 
		price -=(int)(price*salesRatio); // 가격에서 할인율 계산하여 빼주었다.
		return price;
	}
	
	public String getAgentID() {
		return agentID;
	}

	public void setAgentID(String agentID) {
		this.agentID = agentID;
	}
}


package ch04;

public class CustomerTest {

	public static void main(String[] args) {

		Customer customerLee = new Customer();
		customerLee.setCustomerName("이순신");
		customerLee.setCustomerID(10010);
		customerLee.bonusPoint = 1000;
		int price = customerLee.calcPrice(1000); // price라는 변수를 선언하고 값을 입력해준다.
		
		System.out.println(customerLee.showCustomerInfo() + price);
		System.out.println(customerLee.showCustomerInfo());
		
		VIPCustomer customerKim = new VIPCustomer();
		customerKim.setCustomerName("김유신");
		customerKim.setCustomerID(10020);
		customerKim.bonusPoint = 10000;
		price = customerKim.calcPrice(1000); // 변수는 선언 되었기때문에 값만 입력해도 된다.
		System.out.println(customerKim.showCustomerInfo() + price);
		System.out.println(customerKim.showCustomerInfo());
	}

}

@overriding 애노테이션
- 애노테이션은 주석이라는 의미
- 컴파일러에게 특별한 정보를 제공하는 역할

에노테이션 설명
@Override 재정의된 메서드라는 정보 제공
@FuctionalInterface
(펑셔널인터페이스 Interface
I는 대문자)
함수형 인터페이스라는 정보 제공
@Deprecated 이후 버전에서 사용되지 않을 수 있는 변수, 메서드에 사용됨
@SuppressWarnings 특정경고가 나타나지 않도록함 (예)@SuppressWarnings("deprecated")는 @Dprecated 가 나타나자 않도록함

- @overriding 애노테이션은 재정의 된 메서드라는 의미로 선언부가 기존의 메서드와 다른 경우 에러가 남

형변환과 오버라이딩 메서드 호출
Customer vc = new VIPCustomer();
vc변수 타입은 Customer지만 인스턴스의 타입은 VIPCustomer임
자바에서는 항상 인스턴스의 메서드가 호출됨 (가상 메서드의 원리) vc에 값을 출력하면 VIPCustomer과 동일하다.
자바의 모든 메서드는 가상메서드(virtual method)임

728x90

관련글 더보기