비교항목 | 오버라이딩 | 오버로딩 |
메소드 시그니처 (메서드이름, 매개변수[개수, 타입, 순서]) |
같아야 한다. | 달라야 한다. |
리턴타입 | 같다 | 같다 |
용도 | riding(올라탄다)을 이용해서 부모 클래스에 추가로 더하다, 또는 올라타서 동작방법을 추가할 때 사용한다. |
loading은 매개변수의갯수나 타입을 다르게 하고 싶을 때 사용한다. |
질문사항 정리
1. 오버라이딩: 만약 return 타입이 다르다면?
컴파일 오류가 발생합니다.
그러나 자바 5 이전 버전에서는 오버라이딩된 메서드의 반환 타입을
하위 클래스의 타입으로 변환하는 것이 허용되었습니다.
하지만 자바 5 이후 버전부터는 반환 타입 또한 엄격하게 일치해야 하므로 변경되었습니다.
2. 오버로딩: 만약 return 타입이 다르다면?
만약 return 타입이 메서드 시그니처에 포함된다면 jvm이 판단기준이 어려워진다.
만약 반환형이 메서드 시그니처에 포함된다면 jvm이 판단기준이 어려워진다.
메서드 시그니처(이름, 파라미터 수, 타입의 순서)가 모두 같은 두 개의 메서드가 반환형이
1. Integer
2. Double 라고 가정한다면
System.out.println(myMethod());
라고 할 때, JVM은 어떤 메서드를 호출해야 할지 결정하지 못한다.
따라서 반환형은 메서드 시그니처에 포함되지 않는다.
=> 결론: 오버로딩할 때 반환타입은 같아야 한다.
'CS🖥️ > OOP' 카테고리의 다른 글
[OOP] 오버라이딩 (overriding) (0) | 2023.09.02 |
---|---|
[OOP] 상속과 생성자 & super (0) | 2023.09.02 |
[OOP] 오버로딩 & 메서드 시그니처 (overloading & method signature) (0) | 2023.09.02 |