Você declarou a classe Thing
como uma classe interna não estática. Isso significa que ele deve estar associado a uma instância da Hello
classe.
No seu código, você está tentando criar uma instância de Thing
um contexto estático. É disso que o compilador está reclamando.
Existem algumas soluções possíveis. Qual solução usar depende do que você deseja alcançar.
Saia Thing
da Hello
classe.
Mude Thing
para ser uma static
classe aninhada.
static class Thing
Crie uma instância de Hello
antes de criar uma instância de 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
}
A última solução (uma classe aninhada não estática ) seria obrigatória se qualquer instância Thing
dependesse de uma instância Hello
para ser significativa. Por exemplo, se tivéssemos:
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;
}
}
...
}
qualquer tentativa bruta de criar um objeto de classe Thing
, como em:
Thing t = new Thing(31);
seria problemático, pois não haveria um enormous
valor óbvio para testar 31 contra ele. Uma instância h
da Hello
classe externa é necessária para fornecer este h.enormous
valor:
...
Hello h = new Hello(30);
...
Thing t = h.new Thing(31);
...
Porque isso não significa a Thing
se não tiver a Hello
.
Para obter mais informações sobre classes aninhadas / internas:
Classes aninhadas (The Java Tutorials)