2017-10-24 4 views
0

내가 외부 클래스와이 프로그램을 컴파일에

class Outer { 
    static int x = 20; 
    static class Nested { 
    static void show() { 
     System.out.println(x); 
    } 
    } 
} 

같은 정적 중첩 클래스가, 나는라는 두 개의 class 파일을 가지고있다.

내 질문은, 다른 클래스 Test1 (연결을 사용하여)에서 외부 $ Nested.class 사용하려고합니다.

class Test1 { 
    public static void main(String... args) { 
    Outer$Nested i = new Outer$Nested(); 
    } 
} 

내게 컴파일 시간 오류가 있습니다. 심볼 Outer $ Nested를 찾을 수 없습니다. 그리고 우리는 정적 중첩 클래스를 Outer.Nested로 직접 사용할 수 있다는 것을 알고 있지만, 나는 이것을 시도하고있다. 그러나이 클래스를 상속을 통해 사용하려고하면 컴파일되고 정상적으로 실행됩니다.

class Temp2 extends Outer$Inner { 
    public static void main(String... args) { 
    show(); 
    } 
} 

이제 컴파일하고 좋은 출력을 실행 : 20

그래서 제 질문은 우리가 우리가 변수를 선언 할 수 없습니다 협회 및 이벤트를 통해 외부 $ 중첩을 사용할 수없는 것을 일어나는 이유는, 상속을 통해 사용할 수 있습니까?

+0

의 라인을 만들려하지 않았다 "나는 = 새 외부를 Outer.Nested. 중첩 된(); " –

+0

중첩 된 클래스를 인스턴스화하는 방법은 알고 있지만 질문하는 방식을 묻는 중입니다. –

+0

Eclipse에서 컴파일하는 대신'javac' 명령 줄을 사용하면 두 번째 경우를 컴파일 할 수 있습니다. 첫 번째 경우에,'new Outer $ Nested(). show();'로 변경하면 컴파일되고 실행될 수도 있습니다. 이상 하네. 그러나 일반적으로 코딩에서는이 이름을 사용하지 않습니다. – Alex

답변

0

내가 상속 개념 당신의 방법처럼 작동 방법을 알고 있지만 사용해보십시오 내부 중첩 클래스 사용의 예 코드

public static void main(String[] args){ 
    Outer.Nested obj= new Outer.Nested(); 
    obj.show(); 
} 
+0

중첩 된 클래스를 인스턴스화하는 방법을 알고 있지만이 문제가 어떻게 발생 하는지를 묻는 중입니다. 왜 자바의 이런 행동인가? –

+0

이것은 한 곳에서만 사용되는 클래스를 논리적으로 그룹화하는 방법으로, 캡슐화를 늘리며 더 읽기 쉽고 유지 보수가 쉬운 코드로 이어질 수 있습니다. https://docs.oracle의 중첩 된 정보 및 동작에 대한 자세한 내용은 여기를 참조하십시오. .com/javase/tutorial/java/javaOO/nested.html – Lee