자바의 경우 모든 메서드는 가상 메서드이고 해당 메서드에 대한 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
'언어 > 자바' 카테고리의 다른 글
객체지향OOP, 도메인 구조(서비스, 레퍼지토리, 컨트롤러, 모델 ) (0) | 2024.06.26 |
---|---|
추상클래스/템플릿 메서드, final 예약어 (0) | 2023.11.11 |
static 변수, 메서드 / 싱글톤패턴 (0) | 2023.11.06 |
[Java] 클래스, 인스턴스, 힙메모리 (0) | 2023.11.05 |