2013-06-29 3 views
4

다소 이상한 동작이 발생합니다.이 문제가 Java 문제인지 아니면 Eclipse에서만 발생하는지 확신 할 수 없습니다.Java 클래스 메소드가 동일한 클래스 매개 변수의 비공개 필드를 볼 수 있습니다.

여기 IS
class Foo { 
    private String text; 

    public void doStuff(Foo f) { 
    System.out.println(f.text); 
    } 
} 

문제는, 왜 접근 f.text입니다 :

다음 코드를 가지고? 그것은 개인 필드이므로 내 논리에 따르면 안된다.하지만 IDE는 그렇게 생각하는 것 같다.

+0

가능한 복제본 [다른 개체의 개인 필드를 복제 할 수있는 이유는 무엇입니까?] (http://stackoverflow.com/questions/976243/why-can-clone-set-a-private-field-on-another- 객체) –

+0

[Java에서 public, default, protected 및 private의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/215497/in-java-whats-the-difference-between-public) -default-protected-and-private) –

+0

기본적으로 한 언어의 규칙이 다른 언어에 적용된다고 가정하지 마십시오. 대신, 사용중인 언어의 규칙을 배우십시오. 이 경우, Java 언어 스펙이'private'의 의미에 대해 말하고있는 것을보십시오. –

답변

12

이것은 의도적으로 설계된 것입니다. 다른 클래스 인 인 경우에도 동일한 필드 내에서 비공개 필드 에 액세스 할 수 있습니다. 자세한 내용은 here, 이에 대한 Oracle의 공식 성명을 참조하십시오. doStuffFoo의 구성원이므로 Foo의 개인 필드에 액세스 할 수 있습니다.

전용 개질제는 회원이 자신의 클래스 [심지어 다른 인스턴스에서]에만 액세스 할 수 있도록 지정한다. [강조 광산]

지금, 다음 코드 예 인해 text의 시인성 개질제로 하지 작업을 수행 doMoreStuff가 Bar하지 Foo 정의되므로

class Bar{ 
    public int baz; 
    public void doMoreStuff(Foo f){ 
    System.out.println(f.text); 
    } 
} 

.

+0

그건 의미가 있습니다! 링크 된 페이지에는 실제로 []에서 추가 한 비트가 없습니다. 그러나 이것이 해당 클래스의 의미라고 생각합니다. 답변 해주셔서 감사합니다. – Marconius