Você declarou a classe Thingcomo uma classe interna não estática. Isso significa que ele deve estar associado a uma instância da Helloclasse.
No seu código, você está tentando criar uma instância de Thingum 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 Thingda Helloclasse.
Mude Thingpara ser uma staticclasse aninhada.
static class Thing
Crie uma instância de Helloantes 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 Thingdependesse de uma instância Hellopara 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 enormousvalor óbvio para testar 31 contra ele. Uma instância hda Helloclasse externa é necessária para fornecer este h.enormousvalor:
...
Hello h = new Hello(30);
...
Thing t = h.new Thing(31);
...
Porque isso não significa a Thingse não tiver a Hello.
Para obter mais informações sobre classes aninhadas / internas:
Classes aninhadas (The Java Tutorials)