본문 바로가기
Oracle 1z0-808 Exam

Oracle 1z0-808 Exam 2024: Question #6

by Status Code 2024. 2. 19.

Oracle 1z0-808 Exam: Question #6 해설

질문 원본 내용

Consider the following code:

abstract class Planet {
    protected void revolve() { // line n1
    }

    abstract void rotate(); // line n2
}

class Earth extends Planet {
    void revolve() { // line n3
    }

    protected void rotate() { // line n4
    }
}

Which two modifications, made independently, enable the code to compile? (Choose two.)

A. Make the method at line n1 public.
B. Make the method at line n2 public.
C. Make the method at line n3 public.
D. Make the method at line n3 protected.
E. Make the method at line n4 public.


질문 번역

다음은 Java 클래스와 메소드에 관한 코드 예시입니다:

abstract class Planet {
    protected void revolve() { // line n1
    }

    abstract void rotate(); // line n2
}

class Earth extends Planet {
    void revolve() { // line n3
    }

    protected void rotate() { // line n4
    }
}

이 코드를 컴파일하기 위해 독립적으로 어떤 두 가지 수정을 해야 합니까? (두 가지를 선택하시오.)

A. line n1의 메소드를 public으로 만듭니다.
B. line n2의 메소드를 public으로 만듭니다.
C. line n3의 메소드를 public으로 만듭니다.
D. line n3의 메소드를 protected로 만듭니다.
E. line n4의 메소드를 public으로 만듭니다.

정답: C와 E

해설

Java에서는 상속을 통해 오버라이드하는 메소드가 부모 클래스의 메소드와 동일하거나 더 높은 접근 수준을 가져야 합니다. 이 규칙에 따라 해석하면:

  • ) : Earth 클래스에서 revolve 메소드의 접근 수준은 기본 접근 지정자를 가지고 있으므로, 이는 상위 클래스의 protected 접근 수준보다 제한적입니다. 따라서 이 메소드의 접근 수준을 public 또는 protected로 변경해야 합니다. 옵션 C가 public으로 변경하는 것을 제안하므로 정답입니다.
  • ) : rotate 메소드는 추상 클래스 Planet에 정의된 추상 메소드를 구현합니다. rotate 메소드는 protected로 정의되어 있으며, 이를 public으로 변경해도 문제가 없습니다. 이렇게 하면 메소드의 접근 수준이 확장되고, 따라서 옵션 E가 또 다른 정답입니다.

옵션 A는 필요하지 않으며, 옵션 D는 protected 접근 지정자가 이미 상위 클래스에 있으므로 필요하지 않습니다. 또한, line n2의 메소드를 public으로 변경하는 것(B 옵션)은 필수적이지 않지만, 이 변경이 있어도 코드는 컴파일될 것입니다.

따라서, 코드를 컴파일 가능하게 만드는 두 가지 수정은 옵션 C와 E입니다.

댓글