2017-05-21 265 views
1

我已經寫了下面的代碼。我可以訪問類NestedClass2的(非靜態)方法m1()嗎??我們是否可以從靜態嵌套類訪問非靜態嵌套類的非靜態方法

class OuterClass 
{ 
    static class NestedClass 
    { 
    static class NestedClass1 
    { 
     class NestedClass2 
     { 
      void m1() 
      { 
      System.out.println("Non-static method of NestedClass2"); 
      } 
     } 
    } 
    } 
} 
+1

你想去哪兒來訪問它? –

+0

另一類的主要方法。 –

+0

「NestedClass4」(NC4)在哪裏?它本身是一個不同的程序,還是嵌套在'OuterClass'中? –

回答

1

爲了從另一個調用NestedClass2.m1(),獨立的階級(在這個例子中,我調用它Main),你需要創建的NestedClass1NestedClass2實例。

在下面的例子中,採取瞭如何創建一個內部類(nc1.new NestedClass2())對如何創建一個內部類(new OuterClass.NestedClass.NestedClass1())的static實例的non-static類實例的外觀。

public class Main { 

    public static void main(String[] args) { 
     OuterClass.NestedClass.NestedClass1 nc1 = new OuterClass.NestedClass.NestedClass1(); 
     OuterClass.NestedClass.NestedClass1.NestedClass2 nc2 = nc1.new NestedClass2(); 
     nc2.m1(); 
    } 
} 
+0

非常感謝! –

+0

不客氣。隨時接受我的答案(通過標記v):-) –

0

實例化一個內部類,我們必須先實例包含它的 類。然後,使用以下語法在外部對象內創建內部對象:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

所以,

  1. 首先創建NestedClass1的實例。
  2. 用上面給出的語法創建NestedClass2的實例。

    class AnyOtheClass { 
        public static void main(String args[]) 
        { 
         OuterClass.NestedClass.NestedClass1 objNestedClass1= new OuterClass.NestedClass.NestedClass1(); 
         OuterClass.NestedClass.NestedClass1.NestedClass2 objNestedClass2= objNestedClass1.new NestedClass2(); 
         objNestedClass2.m1(); 
        } 
    }