2017-05-21 153 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(); 
        } 
    }