2014-04-12 4 views
2

Java에서 개인용 액세스 수정자는 매우 제한적이어서 정의 된 클래스 내에서만 액세스 할 수 있습니다.Java에서 개인 메소드 액세스

예제를 고려하십시오. 여기

package x; 
    public class Boom { 

    protected String name; 

    public Boom() { 

    } 

    private void aConfidentialInfo(){ 
     System.out.println("Some confidential information..."); 
    } 

    protected void display(){ 
     System.out.println("In display method.."); 
     aConfidentialInfo(); 
    } 

} 

package y; 
import x.Boom; 

public class Hack extends Boom{ 

    public Hack{ 
     display(); 
    } 

} 

나는 그것을 클래스 Boom의 개인 구성원 aConfidentialInfo 다음 디스플레이를 호출, 클래스 Hack을 실행할 때. Hack 클래스는 Boom 클래스의 전용 멤버에 어떻게 액세스 할 수 있습니까? 사적인 접근 수정 자의 침해가 아닌가? 어떻게 알맞은 추론으로 이것을 이해하고 설명 할 수 있습니까?

+1

ConfidentialInfo()에 직접 액세스 할 수 없습니다. * CAN *에 액세스 할 수 있습니다(). display()가 하나의 컨텍스트 (기본 클래스에서 호출 될 때)에 기능을 가지고 있다면, (파생 클래스의) 다른 컨텍스트에서 호출 될 때 왜 다른 기능을 가지기를 기대할 수 있습니까? 이 그림에는 전혀 잘못된 것이 없습니다. :) – FoggyDay

답변

5

아니요, Boom- display의 보호 된 구성원에게 액세스합니다. 그것은 합법적 인 것입니다. 서브 클래스 또는 패키지의 모든 것이 보호 된 멤버에 액세스 할 수 있습니다. 보호 된 함수는 Boom 클래스의 일부이므로 private 멤버에 액세스 할 수 있습니다.

3

이것은 다형성의 마술으로 인해 가능합니다.

해킹 붐 (Boom)이므로 모든 공개, 패키지 및 보호 필드와 메소드에 액세스 할 수 있습니다. 따라서 보호 된 display() 메서드를 호출 할 수 있습니다. 다형성의 마술로 해킹에서 전화 걸기는 전화 할 수있는 Boom의 방법을 호출합니다. aConfidentialINfo()