언어/자바

가상 메서드 원리/메서드 재정의(@Override)

youngble 2023. 11. 9. 23:24

 

 

자바의 경우 모든 메서드는 가상 메서드이고 해당 메서드에 대한 address를 가짐

재정의가 안된경우 같은 address를 가리키고 재정의가 된경우 재정의된 메서드주소 address를 가리킨다.

메서드의경우 code영역에 속한다.

위의 코드는 아래 코드를 본후 다시 보면 이해가 쉽다.

 

기존 부모 클래스 Customer 안의 calcPrice 메서드

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

 

 

자식클래스인 VIPCustomer에서 재정의된 calcPrice 메서드

@Override
	public int calcPrice(int price) {
		bonusPoint += price * bonusRatio;
		price -= (int)(price * salesRatio);
		return price;
	}

 

기존 부모클래스 Customer의 calcPrice 메서드를 사용하지않고 @Override를 통해 재정의하게되면 VIPCustomer 인스턴스 생성시 재정의된 메서드로 호출된다.

 

main 함수에서 calcPrice사용

// Customer의 calcPrice계산
Customer customerLee = new Customer(10010, "이순신");
int price = customerLee.calcPrice(1000);
System.out.println(price); 
// 결과 : 1000

// VIPCustomer의 재정의된 calcPrice 계산
VIPCustomer customerKim = new VIPCustomer(10020, "김유신");
price = customerKim.calcPrice(1000);
System.out.println(price);
// 결과 : 900