我们可以从静态嵌套类访问非静态嵌套类的非静态方法

时间:2017-05-21 08:19:02

标签: java

我写了以下代码。我可以访问类NestedClass2的(非静态)方法m1()吗?

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

2 个答案:

答案 0 :(得分:1)

为了从另一个独立的类调用NestedClass2.m1()(在此示例中,我从Main调用它),您需要创建NestedClass1NestedClass2的实例。< / p>

在下面的示例中,查看如何创建内部类的non-static类实例(nc1.new NestedClass2())与如何创建内部类的static实例( new OuterClass.NestedClass.NestedClass1())。

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();
    }
}

答案 1 :(得分: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();
        }
     }