문제
아래 Java 코드의 실행결과로 올바른 것은 무엇인가?
Javaclass A{ public int func(int a, int b){ return a+b; } } class B extends A{ public double func(double a, double b){ return a-b; } } public class Main{ public static void main(String[] args) { int a=10, b=5; B x = new B(); System.out.println(x.func(a, b)); } }
① 10 ② 15 ③ 5 ④ 20
정답
2번
해설
정답: 2. 인수 a, b가 int이므로 상속받은 func(int, int)가 호출되어 10+5=15가 출력된다.
오답 풀이
- 1번: 10은 계산 결과가 아니다.
- 2번:
A의 int 매개변수 메서드가 호출되어 15가 맞다. - 3번:
B의 double 매개변수 메서드가 호출되어 뺄셈한다고 본 값이다. - 4번: 코드상 곱셈이나 다른 연산이 없다.
보충 개념 매개변수 타입이 다르면 오버라이딩이 아니라 오버로딩이며, 호출 시 가장 적합한 시그니처가 선택된다.