Por que um arquivo Java deve ter o mesmo nome que sua classe pública? [duplicado]

Duplicata Possível:
Por que nome de arquivo em java deve ser o mesmo que o nome da classe?

Eu tenho um arquivo chamadotemp.java. Eu escrevi o seguinte código. Por que isso funciona?

<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>

Qualquer por que isso não funciona?

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

questionAnswers(1)

yourAnswerToTheQuestion