정보처리기사 실기JavaJava - 추상클래스 동적 디스패치난이도 4SHORT_ANSWER

정보처리기사 실기 Java - 추상클래스 동적 디스패치 기출문제 #3444

문제

다음 Java 코드의 실행 결과를 쓰시오.

Java
interface Device { String brand = "Generic"; default String getBrand() { return "Default"; } int getPower(); } abstract class Electronics implements Device { String brand = "Electronics"; abstract String getModel(); public String getBrand() { return this.brand + "-" + Device.super.getBrand(); } } class Laptop extends Electronics { String brand = "Laptop"; String model = "Pro"; public int getPower() { return 65; } public String getModel() { return model; } public String getBrand() { return super.brand + "-" + Device.brand + "-" + getPower(); } } public class Main { public static void main(String[] args) { Device d = new Laptop(); Electronics e = (Electronics) d; System.out.println(d.brand + "|" + e.brand + "|" + d.getBrand()); } }

정답

Generic|Electronics|Electronics-Generic-65

Generic|Electronics|Electronics-Generic-65

해설

인터페이스 필드 brand는 정적 바인딩되어 d.brandDevice.brandGeneric을 참조한다. 클래스 필드도 참조 변수 타입 기준으로 접근되므로 e.brandElectronics.brandElectronics를 참조한다. 반면 메서드는 동적 바인딩되어 d.getBrand()는 실제 객체인 LaptopgetBrand()가 호출된다. super.brandElectronics.brand, Device.brand는 인터페이스 상수, getPower()는 65를 반환하므로 최종 결과는 Generic|Electronics|Electronics-Generic-65이다.

이런 문제 20~50개를 한 번에 풀어보세요

매번 새로 추가되는 모의고사 + 오답 자동 복습 + 회차별 실력 추적. 회원가입 후 무료 이용.

[정보처리기사 실기] Java - 추상클래스 동적 디스패치 Java 기출 #3444 | sqldpass