Java klasa wewnętrzna statyczna

0
public class Car{

  private Engine engine;

  private static class Engine{

    String make; 

  }

}

Jak można utworzyć instancje od czegoś co jest statyczne? A taki kod znalazłem w jednym z tutoriali. Jak rozumieć static nested classes, czy mógłby ktoś tak, bym to zrozumiał?

1

Deklaracja klasy wewnętrznej jako static powoduje, że do jej życia nie jest wymagany obiekt klasy w której się zawiera.

class UpperLevel
{
    public class Foo {}
    public static class Bar{}

    Foo foo = new Foo(); //ok
    Bar bar = new Bar(); //ok
}

class OtherClass
{
    UpperLevel up = new UpperLevel(); //ok;
    UpperLevel.Foo foo = new UpperLevel.Foo(); //ERROR!
    UpperLevel.Bar bar = new UpperLevel.Bar(); //ok
}

//czy mi się wydaje, czy kolorowanie składni javy coś słabo działa?

1

Pytanie o klasy zewnętrzne / wewnętrzne
http://4programmers.net/Forum/Newbie/197347-java_-_dziedziczenie_z_klasy_wewnetrznej
no i oczywiście: http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

Wszystko rozbija się o to, że klasa wewnętrzna niestatyczna ma implicite wskaźnik do klasy zewnętrznej, może korzystać z jej pól i metod. Dodatkowo, jeżeli metody czy pola są przesłonięte, to można zastosować następującą konstrukcję (tzn chodzi o A.this.cośtam):

class A {
    class B {
        void print() {
            A.this.print();
        }
    }

    void print() {
        System.out.println("hello");
    }
}

public class Main {
    public static void main(final String[] args) {
        new A().new B().print();
    }
}

PS słówko static być może nie jest najodpowiedniejszym słowem kluczowym do oznaczania klas wewnętrznych bez implicite wskaźnika do klasy otaczającej. ZTCP wybrano już istniejące słowo kluczowe, żeby nie tworzyć tych słów zbyt dużo.

0

Już skumałem. A klasę narzędziową zrobimy robiąc zwykłą klasę, tylko wszystkie pola i metody statyczne?

1

Ja tak właśnie robię. W standardowej bibliotece Javy klasa Math jest właśnie taka, statyczne metody i dwa statyczne pola E oraz PI.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.