Has declarado la clase Thingcomo una clase interna no estática. Eso significa que debe estar asociado con una instancia deHello clase.
En su código, está intentando crear una instancia de Thing un contexto estático. De eso se queja el compilador.
Hay algunas soluciones posibles. Qué solución usar depende de lo que quieras lograr.
Mover Thingfuera de la Helloclase.
Cambiar Thingpara ser una staticclase anidada.
static class Thing
Cree una instancia de Helloantes de crear una instancia 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
}
La última solución (una clase anidada no estática ) sería obligatoria si alguna instancia Thingdependiera de una instancia de Helloser significativa. Por ejemplo, si tuviéramos:
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;
}
}
...
}
Cualquier intento en bruto de crear un objeto de clase Thing, como en:
Thing t = new Thing(31);
sería problemático, ya que no habría un enormousvalor obvio para probar 31 en su contra. Es necesaria una instancia hde la Helloclase externa para proporcionar este h.enormousvalor:
...
Hello h = new Hello(30);
...
Thing t = h.new Thing(31);
...
Porque no significa un Thingsi no tiene un Hello.
Para obtener más información sobre clases anidadas / internas:
Clases anidadas (los tutoriales de Java)