2014-10-03 115 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作爲訪問類的任何其他靜態部件。您可以訪問內部靜態類相同(即,方法,可變)。

對於實施例

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

可以創建Z這樣作爲內部類Object靜態

X.Y.Z obj=new X.Y.Z(); 
3
 Nested.LittleNested b = new Nested.LittleNested(); 

究竟是你想做些什麼?

+0

哇,謝謝!我知道了。 – shanwu 2014-10-03 12:15:55

1

下面將編譯:

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

,或者你可以導入LittleNested

import <yourpackage>.NestedClassPrac.Nested.LittleNested; 

基本上,你有內NestedClassPrac在同一層級內main獲得任何東西,而不需要一個進口。這使您可以訪問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(); 
    } 
} 

從主要方法只能引用嵌套類。你可以在Nested Classes - Java Tutorial