다음 Java 프로그램의 실행 결과를 쓰시오.
class A {
int a;
private int b;
protected int c;
A(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
int func() {
return a + b + c;
}
}
class B extends A {
B(int a, int b, int c) {
super(a, b, c);
}
@Override
public int func() {
return a * c;
}
}
public class Main {
public static void main(String[] args) {
A a = new A(1, 5, 3);
B b = new B(10, 30, 50);
System.out.print(a.func() + b.func());
}
}모범답안
509
풀이와 판단 근거
a는 A(1,5,3) 객체이므로 A.func가 1+5+3=9를 반환한다. b는 B(10,30,50) 객체이고 B가 func를 재정의했으므로 부모의 private 필드 b를 더하는 A.func가 아니라 `a*c`를 계산하는 B.func가 호출되어 10×50=500을 반환한다.
main의 +는 두 정수를 더하므로 9+500=509가 출력된다. 필드 이름과 참조 변수 이름이 같아도 서로 다른 대상이다.
자주 틀리는 지점
- 연산자 우선순위나 재귀 반환 순서를 생략하고 눈에 보이는 값만 바로 계산함
- 값 전달·참조 전달, 오버라이딩·오버로딩 또는 배열과 포인터의 차이를 혼동함
- 출력의 공백·줄바꿈·대소문자를 무시해 509와 다른 형식으로 작성함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.