다음 Java 프로그램에서 인터페이스 기본 메서드 내부의 동적 호출과 super를 사용한 부모 구현 호출을 구분하여 출력 결과를 쓰시오.
interface Processor {
int apply(int value);
default int twice(int value) {
return apply(value) + apply(value + 1);
}
}
class BaseProcessor implements Processor {
@Override
public int apply(int value) {
return value + 2;
}
}
class WeightedProcessor extends BaseProcessor {
@Override
public int apply(int value) {
return value * 3;
}
int summary() {
return super.apply(4) + apply(4);
}
}
public class Main {
public static void main(String[] args) {
Processor item = new WeightedProcessor();
int first = item.twice(2);
int second = ((WeightedProcessor) item).summary();
System.out.print(first + ":" + second);
}
}모범답안
15:18
풀이와 판단 근거
twice는 Processor의 기본 메서드지만 그 안의 apply 호출은 실제 객체의 WeightedProcessor.apply로 동적 연결된다. 따라서 apply(2)+apply(3)은 6+9=15다.
summary에서 `super.apply(4)`는 BaseProcessor 구현을 직접 호출해 6이고, `apply(4)`는 오버라이딩 구현으로 12이므로 second는 18이다. 최종 출력은 `15:18`이다.
자주 틀리는 지점
- 기본 메서드 안에서는 BaseProcessor.apply가 호출된다고 봄
- super.apply(4)도 오버라이딩된 메서드로 연결해 24를 계산함
- 인터페이스 참조를 WeightedProcessor로 캐스팅할 수 없다고 판단함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.