La clase
Coche la has declarado dentro de la clase
Funciones2Bien, eso no es problema. Pero, si quieres que el método estático main() tenga acceso a la clase
Coche, lo has de declarar también como estático.
Es decir, declárala así:
static class Coche {
public int puertas = 0;
public void agregarPuertas() {
this.puertas++;
}
}
En Java hay tres
ámbitos: Local, Global y Estático(este se combina con los otros dos)
Según el ámbito donde se encuentre una variable (o un método, o una declaración de clase..) será visible o no para otros elementos.
El método main() se encuentra en un ámbito "global" porque está declarado directamente dentro de la clase principal
Funciones2.
Tu clase
Coche también es de ámbito "global" por el mismo motivo.
Sin embargo, el main() además de "global", es "estático" (obligatoriamente).
Esto implica que no puede hacer referencia (no puede ver) a otros elementos si no son estáticos como él.
Esto es lo que significa el error que te sale en pantalla.
Así que no te queda otra que declarar la clase
Coche como estática, para que se encuentren en el mismo ámbito.
Si hubieras escrito la clase
Coche en otro archivo .java distinto, es decir, que ya no pertenezca a
Funciones2, entonces no habría surgido este problema porque ya se trataría de una clase independiente.
Pero al ser un miembro de
Funciones2, igual que lo es main(), entonces sí que hay que igualar sus ámbitos.
Esto de los ámbitos "estáticos" y "no estáticos", al principio resulta confuso y algo difícil entender las implicaciones.
Así que ahora mismo, tampoco te preocupes demasiado por esto. Ya lo irás aprendiendo sobre la marcha.
Solo recuerda que habrá ocasiones en las que tendrás que declarar las cosas como static para que el main() pueda verlas.
Un saludo.