이 SCJP 6 책에서 코드입니다 :액세스 지정자는 하위 클래스에서 재정의를 포함합니까?
private final void flipper() {
System.out.println("Clidder");
}
}
public class Clidlet extends Clidder {
public final void flipper() {
System.out.println("Clidlet");
}
public static void main(String[] args) {
new Clidlet().flipper();
}
}
방법 민간 최종 무효 플리퍼() 슈퍼 클래스의는 마지막 방법으로 여기에서 우리는 자신의 서브 클래스에 의해 쟁이를 통해 그들은 수 없다는 것을 알고 있기 때문에 그것의 마지막.
은 Clidlet 클래스 차이이 하나 공개이다 공개 최종 공극 플리퍼() 동일한 이름의 방식 방법이있다. 그래서 내 질문은이 액세스 지정자가 여기에서 재정의하는 것과 관련이 있습니까? 이 수퍼 클래스 메서드는 private이기 때문에 동일한 이름, 동일한 인수, 동일한 반환 형식을 사용하는 subclass에서 사용할 수 있지만 재정의 할 수는 없습니까?
컴파일하려고하면 어떻게됩니까? –
@JBNizet 예상대로 컴파일되고 실행됩니다. 후드에서 일어나는 일이 명백하지 않을 것입니다 (예 : 기본 메소드가 '보호됨'또는 '최종'이없는 '공용'인 경우) 예제 프로그램의 명백한 결과는 구조가 완전히 다른). 예제가 어떤 문맥인지는 모르지만 새로운 프로그래머에게 보여줄 미묘한 오류가있는 아주 나쁜 예입니다. 예를 들어 하위 클래스에서 볼 수없는'private '메소드의 포인트를 구체적으로 보여 주려하지 않는 한 (이는 의심 스럽습니다. 'main'의 테스트 코드에 기초하여). –
잘 컴파일됩니다. – CodeSac