Overriding
less than 1 minute read
메서드 오버라이딩
- 오버라이딩(overriding)?
- 부모로부터 상속 받은 메서드 중에서 자신(자식 클래스)의 역할에 맞지 않는 메서드가 있다면, 자신(자식 클래스)의 역할에 맞춰 상속받은 메서드를 재정의하여 프로그래밍의 일관성을 확보하는 문법이다.
- 덮어쓰는 것이 아니라 자식에서 구성을 바꾼 것이다.
- 오버라이딩은 메서드 시그너처, 즉 메서드명, 파라미터 형식, 리턴 타입이 같아야 한다. 파라미터의 이름은 달라도 된다.
- 이때, 오버라이딩과 오버로딩을 실수하는 경우가 있다. 이런 경우 애노테이션 문법을 사용한다.
@Override
- 애노테이션 문법
- 오버라이딩을 제대로 했는지 컴파일러나 JVM에게 검사하도록 요구하는 특별한 주석이다.
- 오버라이딩을 검사한다.
필드 오버라이딩
- this 와 super
- this.필드명 = 현재 클래스에서 해당 필드를 찾는다. 없으면 상위 클래스로 따라 올라가면서 찾는다.
- super.필드명 = 상위 클래스에서부터 해당 필드를 찾는다. 없으면 계속 상위 클래스로 따라 올라간다.
메서드 오버라이딩
- this와 super
- this.메서드() = 현재 클래스부터 호출할 메서드를 찾는다. 없으면 상위 클래스로 찾아 올라간다.
- super.메서드() = 부모 클래스로부터 호출할 메서드를 찾는다. 없으면 상위 클래스로 찾아 올라간다.
다형적 변수와 오버라이딩
- 레퍼런스가 하위 클래스의 인스턴스를 가리킬 때, 레퍼런스를 통해 호출하는 메서드는 레퍼런스가 실제 가리키는 하위 클래스에서 찾아 올라간다.
- 그렇다고 해서 상위 클래스에 존재하지 않는 메서드를 호출할 수는 없다. 즉, 하위 클래스에서 새로 추가된 메서드를 호출하는 것은 불가능하다.
- 형변환을 수행한 후에 사용하는 것이 가능하다.