¿Por qué un archivo Java debe tener el mismo nombre que su clase pública? [duplicar]

Posible duplicado:
¿Por qué el nombre de archivo en java debería ser el mismo que el nombre de la clase?

Tengo un archivo llamadotemp.java. Escribí el siguiente código. ¿Por qué funciona esto?

<code>class demo //not public keyword and not same as filename
{
    public static void main(String []args)
    {
        System.out.println("this is Main method");
    }
}
</code>

¿Por qué no funciona esto?

<code>public class demo
{
    public static void main(String []args)
    {
        System.out.println("this is Main method");
    }
}
</code>

Respuestas a la pregunta(1)

Su respuesta a la pregunta