메서드 재정의하기 - 오버라이딩

  • 상위 클래스에 정의된 메서드의 구현 내용을 하위 클래스에서 구현할 내용과 맞게 동일한 이름의 메서드로 재정의 할 수 있다

  • 반환값, 메서드 이름, 매개변수의 타입과 개수가 똑같아야한다(다를 경우 다른 메서드로 판단)

  • 위 예제에서 VIP의 가격을 계산하는 메서드 재정의

@Override
    public int calcPrice(int price) {
        bonusPoint += price * bonusPoint;
        price -= (int)(price * salesRatio);
        return price;
    }
  • 그냥 customer로 정의된 고객이 호출한 calcPrice 메서드는 재정의 전의 메서드이고
    VIPCustomer로 정의된 고객이 호출한 calcPrice는 재정의 된 메서드이다
    그렇다면 Customer타입에 VIP생성자로 생성된 고객은? (인스턴스는 VIPCustomer, 변수의 타입은 Customer)
    변수. 하면 Customer의 것들이 보인다
    하지만 재정의된 calcPrice가 사용된다

    자바에서는 항상 인스턴스의 메서드가 호출 된다

가상 메서드의 원리

  • 자바는 모든 메서드가 가상 메서드다

  • 메서드의 이름은 주소값을 나타낸다
  • 메서드는 명령어의 set이고 프로그램이 로드되면 메서드 영역(코드영역)에 명령어 set이 위치
  • 해당 메서드가 호출되면 명령어 set이 있는 주소를 찾아 명령어가 실행됨
  • 메서드에서 사용하는 변수들은 스텍 메모리에 위치하게 된다
  • 다른 인스턴스라도 같은 메서드의 코드는 같으므로 같은 메서드가 호출됨
  • 인스턴스가 생성되면 변수는 힙 메모리에 따로 생성되지만, 메서드 명령어 set은 처음 한번만 로드된다
  • 재정의된 경우 메서드 영역에 재정의된 클래스가 생성되고 함수를 호출하면 재정의 된 함수를 호출한다

애노테이션

  • 주석이라는 의미
    컴파일러에 정보를 전달하는 역할
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글