Overriding

less than 1 minute read

메서드 오버라이딩

  • 오버라이딩(overriding)?
    • 부모로부터 상속 받은 메서드 중에서 자신(자식 클래스)의 역할에 맞지 않는 메서드가 있다면, 자신(자식 클래스)의 역할에 맞춰 상속받은 메서드를 재정의하여 프로그래밍의 일관성을 확보하는 문법이다.
    • 덮어쓰는 것이 아니라 자식에서 구성을 바꾼 것이다.
    • 오버라이딩은 메서드 시그너처, 즉 메서드명, 파라미터 형식, 리턴 타입이 같아야 한다. 파라미터의 이름은 달라도 된다.
    • 이때, 오버라이딩과 오버로딩을 실수하는 경우가 있다. 이런 경우 애노테이션 문법을 사용한다.

@Override

  • 애노테이션 문법
    • 오버라이딩을 제대로 했는지 컴파일러나 JVM에게 검사하도록 요구하는 특별한 주석이다.
    • 오버라이딩을 검사한다.

필드 오버라이딩

  • this 와 super
    • this.필드명 = 현재 클래스에서 해당 필드를 찾는다. 없으면 상위 클래스로 따라 올라가면서 찾는다.
    • super.필드명 = 상위 클래스에서부터 해당 필드를 찾는다. 없으면 계속 상위 클래스로 따라 올라간다.

메서드 오버라이딩

  • this와 super
    • this.메서드() = 현재 클래스부터 호출할 메서드를 찾는다. 없으면 상위 클래스로 찾아 올라간다.
    • super.메서드() = 부모 클래스로부터 호출할 메서드를 찾는다. 없으면 상위 클래스로 찾아 올라간다.

다형적 변수와 오버라이딩

  • 레퍼런스가 하위 클래스의 인스턴스를 가리킬 때, 레퍼런스를 통해 호출하는 메서드는 레퍼런스가 실제 가리키는 하위 클래스에서 찾아 올라간다.
  • 그렇다고 해서 상위 클래스에 존재하지 않는 메서드를 호출할 수는 없다. 즉, 하위 클래스에서 새로 추가된 메서드를 호출하는 것은 불가능하다.
  • 형변환을 수행한 후에 사용하는 것이 가능하다.

Categories:

Updated: