Durante a vídeo aula, até foi mencionado que, se implementarmos o método na subclasse com assinatura diferente do que a super classe define, teríamos um erro de compilação. Porém notei que, se o retorno, na super classe for "void" e na implementação nas classes filhas retornarmos boolean por exemplo, nenhum erro, tanto de compilação como de execução ocorre. Agora, se a super classe definir um retorno boolean e tentarmos implementar com retorno "void", o código não compila. Não entendi exatamente a diferença nesses dois casos. Por que o primeiro caso compila?