-
[JAVA] 메서드 오버라이딩JAVA 2020. 6. 27. 19:43
메서드 오버라이딩
안녕하세요? 장장스입니다.
상위 클래스 메서드를 재정의
메서드 오버라이딩은 하위클래스에서 상속받은 상위 클래스의 메서드를 재정의 하는 기능을 말합니다.
아래는 Cutomer 클래스입니다. 물건을 구매하는 Buy 메서드가 정의되어 있습니다.
public class Customer { protected int id; protected String name; public void showCustomer() { System.out.println("아이디 "+id+"의 고객이름은 "+ name+"입니다."); } public int Buy(int price) { return price; } }
다음과 같이 Cutomer 클래스를 상속받은 VIPCustomer 클래스를 생성했습니다.
그런데 VIP 고객에게는 구매시 10% 할인을 해줍니다. 그래서 다음과 같이 Buy 메서드를 재정의 할 수 있습니다.
public class VIPCustomer extends Customer { @Override public int Buy(int price) { price = (int)(price*0.9); return price; } }
@Override 어노테이션은 컴파일러에게 재정의된 메서드라는 정보를 제공합니다.
가상 메서드
그렇다면 메서드 오버라이딩은 어떻게 이루어지는 걸까요?
클래스를 생성하여 인스턴스를 만들게 되면 클래스 메서드는 코드 영역(메서드 영역)에 위치하게 됩니다.
일반적으로 프로그램에서 메서드를 호출한다는 것은 그 메서드의 명령 집합이 있는 메모리 위치를 참조하여 명령을 실행합니다.
Customer 클래스의 showCustomer() 메서드는 재정의 되지 않았기 때문에 VIPCustomer 클래스는 동일한 주소의 showCustomer() 메서드를 참조합니다.
반면, Buy메서드는 새롭게 재정의 되었기 때문에 VIPCustomer 클래스의 Buy()메서드를 참조합니다.
References
- DO it! 자바
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)
'JAVA' 카테고리의 다른 글
[JAVA] 인터페이스 (interface) (0) 2020.07.04 [JAVA] IS-A 관계, HAS-A 관계 (2) 2020.06.30 [JAVA] 상속에서 클래스 생성과 super (0) 2020.06.23 [JAVA] 자바, ArrayList (0) 2020.06.22 [JAVA] 자바, 배열 복사 (0) 2020.06.22