Java разлики между static nested класове и inner класове

+7 гласа
130 прегледа
попитан 2016 юни 21 в Java от Nikola.Nikolov. (3,100 точки)
Каква е главната разлика м/у един вътрешен (inner) клас и един статичен вгнезден (static nested) клас в Java и имплементацията играе ли роля в избирането на един от двата?

1 отговор

0 гласа
отговорени 2016 юни 23 от Daniel Ivanov (11,160 точки)

Nested класовете се делят на две категории: static и non-static. Nested класовете, които са статични се наричат nested static classes, а nested non-static се наричат inner classes (вътрешни).

Static nested класовете могат да бъдат достъпени чрез заобграждането на името на класа:

OuterClass.StaticNestedClass

Например, да направиш обект от статичния „вгнезден“ клас, го пишеш така:

OuterClass.StaticNestedClass nestedObject = newOuterClass.StaticNestedClass();

Обектите, които са инстанции (класове) на един inner клас съществуват само в рамките на външния за него клас. Виж:

class OuterClass {

    ...

    class InnerClass {

        ...

    }

}

Една инстанция на InnerClass може да съществува само в рамките на OuterClass и има директен достъп до методите и полетата на своята заограждаща инстация.

За да създадеш един вътрешен клас, трябва да създадеш външен за него клас. След това правиш вътрешния в рамките на външния така:

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

Също така да знаеш, че има и вътрешен клас без заобграждащ такъв:

class A {

  int t() { return 1; }

  static A a =  new A() { int t() { return 2; } };

}

Тук,  new A() { ... } е един вътрешен клас, дефиниран в статичен контекст и няма заобгаждащ клас.

...