2014-10-03 1 views
0

아무도 아래 코드가 작동하지 않는 이유를 말해 줄 수 있습니까?Java의 중첩 클래스

public class NestedClassPrac { 
    public static class Nested { 
     public void sayHello() { System.out.println("First nested class~");} 
     public static class LittleNested { 
      public void sayHello() { System.out.println("this is why we are nested class");} 
     } 
    } 


    public static void main(String[] args) { 
     Nested a = new Nested(); 
     a.sayHello(); 
     LittleNested b = new LittleNested(); 
     b.sayHello(); 
    } 
} 

오류 메시지 :

NestedClassPrac.java:13: cannot find symbol 
symbol : class LittleNested 

location: class NestedClassPrac 
     LittleNested b = new LittleNested(); 
     ^

NestedClassPrac.java:13: cannot find symbol 

symbol : class LittleNested 

location: class NestedClassPrac 
     LittleNested b = new LittleNested(); 
          ^
2 errors 

답변

2

LittleNested은 (즉, 방법 변수) 당신이 클래스의 다른 고정 부재 액세스로 우선은 내부 정적 클래스에 동일하게 액세스 할 수 Nested 이용하지 않고 직접적으로 액세스 할 수 Nested 클래스를 통해서만 접근 할 수있다. 이 같은 내부 클래스와 같은 ZObject을 만들 수 있습니다 예

class X{ 
    static class Y{ 
     static class Z{ 
      Z(){ 
       System.out.println("Inside Z"); 
      } 
     } 
    } 
} 

를 들어

정적 있습니다.

Nested.LittleNested b = new Nested.LittleNested(); 

또는 당신은 필요없이

import <yourpackage>.NestedClassPrac.Nested.LittleNested; 

는 기본적으로, 당신은 NestedClassPrac 내부의 계층 구조에서 같은 수준에서 아무것도 main 내부에 액세스 할 수 LittleNested를 가져올 수 있습니다

X.Y.Z obj=new X.Y.Z(); 
3
 Nested.LittleNested b = new Nested.LittleNested(); 
정확히 당신이 뭘 하려는지

?

+0

와우, 감사합니다! 알았다. – shanwu

1

다음은 컴파일 수입. 그러면 Nested에 액세스 할 수 있습니다. 그러나 LittleNested은 계층 적으로 동일한 수준에 있지 않습니다. LittleNestedNested 안에 있습니다. 따라서 가져 오기가 필요합니다.

0

이 같은 접근해야

OuterClass.InnerClass1.InnerClass2...InnerClassN obj=new OuterClass.InnerClass1.InnerClass2...InnerClassN(); 
obj.method(); 
1

당신은 포함하는 클래스 이름을 포함하여 LittleNested 하위 내부 클래스를 참조해야 할 주요 방법의 범위 때문에 작동하지 않습니다 코드 :

public class NestedClassPrac { 
    public static class Nested { 
     public void sayHello() { System.out.println("First nested class~");} 
     public static class LittleNested { 
      public void sayHello() { System.out.println("this is why we are nested class");} 
     } 
    } 


    public static void main(String[] args) { 
     Nested a = new Nested(); 
     a.sayHello(); 
     Nested.LittleNested b = new Nested.LittleNested(); 
     b.sayHello(); 
    } 
} 

main 메소드에서 Nested 클래스 만 참조 할 수 있습니다. 당신은 그것에 대해 읽을 수있다 Nested Classes - Java Tutorial