본문 바로가기

無汗不成


CS🖥️/OOP

오버라이딩 & 오버로딩 비교하기(핵심정리)

비교항목 오버라이딩 오버로딩
메소드 시그니처
(메서드이름, 매개변수[개수, 타입, 순서])
같아야 한다. 달라야 한다.
리턴타입 같다 같다
용도 riding(올라탄다)을 이용해서 부모 클래스에 추가로 더하다, 또는 올라타서 
동작방법을 추가할 때 사용한다.
loading은 매개변수의갯수나 타입을 다르게 하고 싶을 때 사용한다.

 

질문사항 정리

1. 오버라이딩: 만약 return 타입이 다르다면? 

컴파일 오류가 발생합니다.

그러나 자바 5 이전 버전에서는 오버라이딩된 메서드의 반환 타입을

하위 클래스의 타입으로 변환하는 것이 허용되었습니다.

하지만 자바 5 이후 버전부터는 반환 타입 또한 엄격하게 일치해야 하므로 변경되었습니다.

 

 

2. 오버로딩: 만약 return 타입이 다르다면? 

만약 return 타입이 메서드 시그니처에 포함된다면 jvm이 판단기준이 어려워진다.

만약 반환형이 메서드 시그니처에 포함된다면 jvm이 판단기준이 어려워진다.

메서드 시그니처(이름, 파라미터 수, 타입의 순서)가 모두 같은 두 개의 메서드가 반환형이 

1. Integer

2. Double 라고 가정한다면

System.out.println(myMethod());

라고 할 때, JVM은 어떤 메서드를 호출해야 할지 결정하지 못한다.

따라서 반환형은 메서드 시그니처에 포함되지 않는다.

=> 결론: 오버로딩할 때 반환타입은 같아야 한다.