[Java] Method Overriding

SeongWon Oh·2021년 8월 15일
0

Java

목록 보기
15/39
post-thumbnail

Overriding

  • 상위 클래스에서 정의된 method의 내용을 하위 클래스에서 동일한 이름으로 method를 재정의 하는 것을 의미한다.

  • ex) VIP고객들의 요금계산을 하는 매서드인 calcPrice()는 상위 클래스인 일반 클래스의 calcPrice() 매서드와 맞지 않아 재정의가 필요하다.

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

annotation

  • 위의 코드의 @overriding과 같은 것을 의미하며 컴파일러에게 특별한 정보를 제공해주는 역할을 한다.

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

형 변환과 overriding 메서드

	Customer customer2 = new VIPCustomer(10020, "김유신");
	customer2.bonusPoint = 10000;
	price = customer2.calcPrice(1000);
	System.out.println(customer2.showCustomerInfo() + price);
  • Customer customer2 = new VIPCustomer(10020, "김유신");는 변수의 타입은 Customer이지만 인스턴스의 타입은 VIPCustomer이다. 이와같이 형변환을 하면 상위 클레스의 변수와 메서드에만 접근이 가능하지만 결과는 1000이 아닌 900이 나온다.

  • 이러한 결과가 나오는 이유는 메서드의 이름들은 코드영역의 주소값을 나타내는데 메서드를 재정의(Overriding)을 하는 경우 메서드의 이름이 가르키는 주소영역은 재정의된 메서드의 주소를 가르키기 때문에 이러한 결과가 나온다.

※ 자바의 모든 메서드는 가상 메서드(virtual method) 이다.

※ 형변환을 하는데 메서드의 overriding을 하는 경우 해당 메서드는 재정의한 하위 클래스의 메서드로 실행된다!!!



Reference

  • [Fast Campas] 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글