Tenho 2 classes: Pessoa e Funcionario(subclasse).
Qual a diferença entre as instâncias abaixo e porque uma está certa e outra não?
Pessoa p = new funcionario();
Funcionario f = new pessoa ();
Tenho 2 classes: Pessoa e Funcionario(subclasse).
Qual a diferença entre as instâncias abaixo e porque uma está certa e outra não?
Pessoa p = new funcionario();
Funcionario f = new pessoa ();
Basicamente, toda subclasse É UMA classe.
Ou seja, o compilador reconhece que você tem uma Pessoa dentro de Funcionario e, por esta razão, permite que se cria uma instância de objeto Pessoa a partir de um Funcionario.
Ocorre que o contrário não é válido, ou seja, você não consegue criar um Funcionário de uma Pessoa. Afinal, nem toda Pessoa é um Funcionário. O compilador não consegue entregar os detalhes que Funcionario possui e que não estão em Pessoa (o que é justificável, tendo em vista que Funcionario é uma especialização de Pessoa).
Pense da seguinte forma ok?
Uma pessoa pode ser também um funcionário, por isso que o primeiro funciona.
Agora um funcionário, é algo muito restrito, é um tipo muito “menor” do que pessoa, e por isso guardar uma pessoa em um funcionário não funciona.
Pensa em pessoa como se fosse um circulo grande, um conjunto grande, e funcionário um conjunto pequeno, talvez fique mais fácil de visualizar que um funcionário pode ser colocado dentro do tipo pessoa, mas o tipo pessoa não pode ser colocado dentro do tipo funcionário.
Pensando dessa forma faz mais sentido, obrigado!