2016-11-29 3 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() будет вызывать конструктор по умолчанию для класса отчетов для правильного создания экземпляра? –

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^