2014-02-15 1 views
1

글쎄, 내 코드는 작동하지만이 경우에는 private 변수가 작동하는 이유를 이해할 수 없다. equals().Comparable Class equals 함수는 private 변수에서 작동합니까?

또는 동일한 종류의 객체 구조 안의 다른 객체를 호출하면 private 식별자가 포함되지 않습니다.

public class TestClass implements Comparable <TestClass> { 
    private final String name; 
    public TestClass(String name) { 
     this.name = name; 
    } 

    @Override 
    public int hashCode() { 
     return name.hashCode(); 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (obj instanceof TestClass) { 
      return ((TestClass) obj).name.equals(name); //<- how does this work, isn't name private? 
     } else { 
      return false; 
     } 
    } 

    @Override 
    public int compareTo(TestClass test) { 
     int thisValue = hashCode(); 
     int otherValue = test.hashCode(); 
     if (thisValue < otherValue) { 
      return -1; 
     } else if (thisValue > otherValue) { 
      return 1; 
     } else { 
      return 0; 
     } 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 
} 

답변

2

예, 이러한 수정은 클래스 정의 인스턴스 범위가없는 범위. JavaOO tutorialsJava Language Specification을 확인 : 그것은 최상위 클래스의 신체 내에서 발생하는 경우 회원 또는 생성자 개인 선언 된 경우

그렇지 않으면, 다음 액세스 및 경우에 허용됩니다 만 (§7.6) 그 선언을 둘러싸 또는 생성자.

+0

이것은 의미가 없습니다. 보안을 위해 OO 캡슐화 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) – gertas

1

"개인 식별자가 계산되지 않는 동일한 종류의 개체 구조 안에서 다른 개체를 호출하면 트릭이 발생합니까?" - 간단합니다, 네.

편집 공식 설명 :

"사용 된 첫 번째 (가장 왼쪽) 수정은 다른 클래스가 멤버 필드에 대한 액세스 권한을 제어 할 수있는 순간 만 공공 및 민간 고려해 다른 액세스 한정자를.. public modifier - 모든 클래스에서 필드에 액세스 할 수 있습니다. private 수정 자 - 필드는 자체 클래스 내에서만 액세스 할 수 있습니다. "

(http://docs.oracle.com/javase/tutorial/java/javaOO/variables.html)

+0

상당한 것을 추가 할 수 있습니까? 이것을 설명하는 JLS에 대한 링크일까요? –

+0

여기에 같은 대답은 : http://stackoverflow.com/questions/16354728/why-have-class-level-access-modifiers-instead-of-object-level 신경 쓰지 마 C# – SSpoke

+0

"첫 번째 (가장 왼쪽) 사용 된 수정자를 사용하면 다른 클래스가 멤버 필드에 액세스 할 수있는 것을 제어 할 수 있습니다. 현재 공개 및 비공개를 고려하십시오. 해당 필드는 자체 클래스 내에서만 액세스 할 수 있습니다. " (http://docs.oracle.com/javase/tutorial/java/javaOO/variables.html) – Smutje