정보처리기사 실기JavaJava - 추상클래스와 인터페이스난이도 5SHORT_ANSWER

정보처리기사 실기 Java - 추상클래스와 인터페이스 기출문제 #349

문제

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

Java
abstract class Animal { String name = "Animal"; abstract String sound(); String getName() { return this.name; } } interface Pet { String name = "Pet"; default String getOwner() { return "Unknown"; } } class Dog extends Animal implements Pet { String name = "Dog"; String sound() { return "Bark"; } String getOwner() { return Pet.super.getOwner() + " Owner"; } } public class Main { public static void main(String[] args) { Pet p = new Dog(); Animal a = (Animal)p; System.out.println(p.name + " " + a.name + " " + a.getName() + " " + p.getOwner()); } }

정답

Pet Animal Dog Unknown Owner

Pet Animal Dog Unknown OwnerPetAnimalDogUnknownOwner

해설

  1. p.name: Pet 타입으로 선언되었으므로 인터페이스 Pet의 상수 "Pet" 출력 (정적 바인딩)
  2. a.name: Animal 타입으로 캐스팅되었으므로 Animal 클래스의 필드 "Animal" 출력 (정적 바인딩)
  3. a.getName(): Dog 객체의 오버라이딩된 메서드가 호출되지만, Dog에서 getName()을 오버라이딩하지 않았으므로 Animal의 getName() 호출. this.name은 Dog 객체의 name 필드인 "Dog" 반환 (동적 바인딩)
  4. p.getOwner(): Dog에서 오버라이딩된 getOwner() 호출. Pet.super.getOwner()로 인터페이스의 default 메서드 "Unknown" 반환 후 " Owner" 연결하여 "Unknown Owner" 출력 (동적 바인딩)

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

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