2014-10-21 1 views
1

다음 Java 프로그램이 성공적으로 컴파일됩니다. 개인 변수 className이 클래스 외부에서 액세스되므로 y.className = "No class name."; 문에 오류가 발생할 것으로 예상됩니다.java에서 해당 클래스 외부의 개인 변수에 액세스

class t { 

    public static void main(String[] r) { 

     Y y = new Y(); 

     y.className = "No class name."; 

     y.echoClassName(); 
    } 

    static class Y { 

     private String className = "Class Name is Y."; 

     public void echoClassName() { 

      System.out.println(className); 
     } 
    } 
} 

왜 오류가 표시되지 않습니까?

+0

@MarounMaroun 참조 하시겠습니까? –

+1

docs : http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html을 참조하십시오. – Maroun

답변

8

개인 변수의 범위는 동봉 된 전체 최상위 클래스입니다 (t).

그렇지 않으면, 구성원 또는 생성자 개인 선언하고, 액세스가 최상위 클래스 (§7.6의 신체 내에서 발생하는 경우에만 및 경우에 허용된다 : 예 JLS #6.6.1 (강조 광산)를 참조하십시오)을 사용하여 구성원 또는 생성자의 선언을 둘러 쌉니다.

1

Y는 중첩 된 클래스입니다. 이것은 main 클래스를 실행하는 t 클래스에 embeeded된다는 것을 의미합니다. 해당 클래스에만 표시되지만 클래스에 private 변수가있는 클래스를 중첩하면이 클래스에서이 변수에 액세스 할 수 있습니다.

다른 파일에 Y 클래스를 넣은 다음 t로 생성하면 가시성 오류가 발생합니다. 중첩 클래스를 사용하기 때문에 모든 것이 정상입니다.