Zadeklarowałeś klasę Thing
jako niestatyczną klasę wewnętrzną. Oznacza to, że musi być powiązany z instancjąHello
klasy.
W swoim kodzie próbujesz utworzyć instancję Thing
z kontekstu statycznego. Na to narzeka kompilator.
Istnieje kilka możliwych rozwiązań. Wybór rozwiązania zależy od tego, co chcesz osiągnąć.
Wyjdź Thing
z Hello
klasy.
Zmień Thing
się na static
klasę zagnieżdżoną.
static class Thing
Tworzenie instancji z Hello
przed utworzeniem instancji Thing
.
public static void main(String[] args)
{
Hello h = new Hello();
Thing thing1 = h.new Thing(); // hope this syntax is right, typing on the fly :P
}
Ostatnie rozwiązanie ( niestatyczna klasa zagnieżdżona) byłoby obowiązkowe, gdyby jakakolwiek instancja Thing
zależała od instancji, Hello
aby była znacząca. Na przykład, gdybyśmy mieli:
public class Hello {
public int enormous;
public Hello(int n) {
enormous = n;
}
public class Thing {
public int size;
public Thing(int m) {
if (m > enormous)
size = enormous;
else
size = m;
}
}
...
}
każda surowa próba stworzenia obiektu klasy Thing
, jak w:
Thing t = new Thing(31);
byłoby problematyczne, ponieważ nie byłoby oczywistej enormous
wartości, aby przetestować 31 z nim. Wystąpienie h
w Hello
zewnętrznej klasy jest to konieczne, aby zapewnić to h.enormous
wartości:
...
Hello h = new Hello(30);
...
Thing t = h.new Thing(31);
...
Ponieważ to nie znaczy, Thing
jeśli nie ma Hello
.
Aby uzyskać więcej informacji na temat klas zagnieżdżonych / wewnętrznych:
Zagnieżdżone klasy (samouczki Java)