Has declarado la clase Thing
como 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 Thing
fuera de la Hello
clase.
Cambiar Thing
para ser una static
clase anidada.
static class Thing
Cree una instancia de Hello
antes 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 Thing
dependiera de una instancia de Hello
ser 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 enormous
valor obvio para probar 31 en su contra. Es necesaria una instancia h
de la Hello
clase externa para proporcionar este h.enormous
valor:
...
Hello h = new Hello(30);
...
Thing t = h.new Thing(31);
...
Porque no significa un Thing
si no tiene un Hello
.
Para obtener más información sobre clases anidadas / internas:
Clases anidadas (los tutoriales de Java)