8장_아이템52 - ririkat/effective-java GitHub Wiki
📝 다중 정의를 한 메서드는 컴파일 타임에 지정된 기준 타입으로 호출하기 때문에 원하는 결과를 얻지 못할 수 있다.
- 메서드 호출 : 컴파일 타임에 정해진다.
- 타입 : 런타임에 다르게 지정된다.
-
재정의 메서드
동적선택
메서드 재정의는 상위 클래스가 정의한 것과 똑같은 시그니처 메서드를 하위 클래스에서 다시 정의한 것을 말한다. 컴파일 타임에 영향을 받지 않는다.
-
다중정의 메서드
정적선택
컴파일 시점에 지정된 타입으로 정적 선택 되어 동작한다. 런타임 시점에 정의된 타입은 영향을 받지 않는다.
instanceof
로 타입 검사 하면 해결 된다.
다중 정의가 혼동을 일으키는 상황은 피하고 다중 정의 대신 메서드명을 다르게 짓는 것을 권장한다. 그렇다고 다중 정의를 쓰지 말라는 소리는 아니다. 다중 정의가 혼동을 일으키는 상황은 피하라는 말은 혼동을 일으킬 일이 없다면 사용해도 괜찮다.
- 매개변수 중 하나 이상이 근본적으로 다르다.
위 조건을 충족하면 컴파일 타임에 영향을 받지 않고, 런타임 타임으로 결정된다.
단, 함수형 인터페이스의 경우은 서로 다른 함수형 인터페이스라도
근본적으로 다르지 않기 때문에 같은 위치의 매개 변수로 받아서는 안된다.