2016-11-29 142 views
0

我已经知道静态嵌套类应该像外层类(第2行)一样被访问。但即使实例化内部类直接工作(第1行)。你能帮我理解吗?在Java中访问静态嵌套类的方法

public class OuterClass 
{ 
    public OuterClass() 
    { 
     Report rp = new Report(); // line 1 
     OuterClass.Report rp1 = new OuterClass.Report(); // line 2 
    } 

    protected static class Report() 
    { 
     public Report(){} 
    } 
} 
+1

无关,但请考虑正常化您的缩进。无论如何,你从包含类中访问它,所以不需要用'OuterClass'作为前缀。这是当你从外部访问暴露的内部类时需要包含的类。 –

+0

也无关:“报告()”应该是“报告” – Addi

+0

@Addi我不明白。新的Report()会调用report类的默认构造函数来创建一个实例吗? –

回答

1

像访问外部类

的领域,这就是你在做什么。想象一下:

class OuterClass 
{ 
    SomeType somefield; 
    static SomeType staticField;  

    public OuterClass() 
    { 
     //works just fine. 
     somefield = new SomeType(); 
     //also works. I recommend using this 
     this.somefield = new SomeType(); 

     //the same goes for static members 
     //the "OuterClass." in this case serves the same purpose as "this." only in a static context 
     staticField = new SomeType(); 
     OuterClass.staticField = new SomeType() 
    } 
}