Duvida com polimorfismo

Java

POO

24/05/2019

Galera, estou estudando aqui POO, assunto de Herança. Criei uma superclasse Pessoa, outras Aluno e Professor. Na hora de instanciar essas classes numa classe teste eu fiz assim:

pessoa Aluno = new Aluno();            
//pessoa é tipo ? 


// por que eu posso fazer assim ?

Aluno aluno = new Aluno();


dos dois jeitos acima, deu certo. Mas assim não :

Professor pessoa = new pessoa();


Não entendo porque deu certo em alguns casos e no de baixo nao. E qual a relação que isso tem com aquela classe Scanner : Scanner scan = new Scanner(System.in);




//Java permite que eu organize os dados das duas maneiras acima
//Por que isso acontece e qual a diferença entre ambos?
Weslley Felix

Weslley Felix

Curtidas 0

Melhor post

Sadasd

Sadasd

25/05/2019

Olá amigo, para responder a sua dúvida deixe-me explicar um pouco sobre polimorfismo e herança:
Quando você declara uma classe chamada "pessoa" que é herdada por outras duas classes chamadas "aluno" e "professor" você está implicitamente dizendo que todo aluno é uma pessoa e que todo professor é uma pessoa, mas não necessariamente toda pessoa é um professor ou um aluno, dito isso, você pode fazer uma instanciação da seguinte forma(desculpe, não sei utilizar os campos de código direito no comentário):
Pessoa weslley = new Aluno(); <----Aqui você está dizendo: "Estou criando um novo aluno chamado weslley, e por ser um aluno ele é também uma pessoa"
ou assim:
Pessoa weslley = new Professor(); <----Aqui você está dizendo:"Estou criando um novo professor chamado weslley, e por ser um professor ele é também uma pessoa"
mas não pode fazer isso, como fez no seu código:
Professor weslley = new Pessoa(); <---- Aqui você estaria dizendo:"Estou criando uma nova pessoa chamada weslley, que por ser uma pessoa é também um professor" percebe o erro lógico?

Agora sobre a questão do Scanner, olha, quando você diz:
Pessoa wessley = new Aluno(); Você está criando um objeto chamado weslley
Scanner scan = new Scanner(System.in); Você está criando um objeto chamado scan

Fora o fato de ambos serem objetos não há semelhança entre eles, já que suas funções dentro do código são completamente diferentes.

Outra coisa sobre polimorfismo é que você pode fazer isso aqui com um classe chamada "Carro" que herda de uma classe chamada "Veiculosterrestres" que herda de uma classe chamada "Veicuos":

Carro c = new Veiculo(); <---- Aqui você está implicitamente dizendo:"Estou criando um carro chamado c, que por ser um carro é também um veículo"

Só uma dica final: Deixe suas classes com a primera letra do nome em maiúsculo, então mude "pessoa" para "Pessoa", é uma boa prática de programação.
GOSTEI 1

Mais Respostas

Weslley Felix

Weslley Felix

24/05/2019

Olá amigo, para responder a sua dúvida deixe-me explicar um pouco sobre polimorfismo e herança:
Quando você declara uma classe chamada "pessoa" que é herdada por outras duas classes chamadas "aluno" e "professor" você está implicitamente dizendo que todo aluno é uma pessoa e que todo professor é uma pessoa, mas não necessariamente toda pessoa é um professor ou um aluno, dito isso, você pode fazer uma instanciação da seguinte forma(desculpe, não sei utilizar os campos de código direito no comentário):
Pessoa weslley = new Aluno(); <----Aqui você está dizendo: "Estou criando um novo aluno chamado weslley, e por ser um aluno ele é também uma pessoa"
ou assim:
Pessoa weslley = new Professor(); <----Aqui você está dizendo:"Estou criando um novo professor chamado weslley, e por ser um professor ele é também uma pessoa"
mas não pode fazer isso, como fez no seu código:
Professor weslley = new Pessoa(); <---- Aqui você estaria dizendo:"Estou criando uma nova pessoa chamada weslley, que por ser uma pessoa é também um professor" percebe o erro lógico?

Agora sobre a questão do Scanner, olha, quando você diz:
Pessoa wessley = new Aluno(); Você está criando um objeto chamado weslley
Scanner scan = new Scanner(System.in); Você está criando um objeto chamado scan

Fora o fato de ambos serem objetos não há semelhança entre eles, já que suas funções dentro do código são completamente diferentes.

Outra coisa sobre polimorfismo é que você pode fazer isso aqui com um classe chamada "Carro" que herda de uma classe chamada "Veiculosterrestres" que herda de uma classe chamada "Veicuos":

Carro c = new Veiculo(); <---- Aqui você está implicitamente dizendo:"Estou criando um carro chamado c, que por ser um carro é também um veículo"

Só uma dica final: Deixe suas classes com a primera letra do nome em maiúsculo, então mude "pessoa" para "Pessoa", é uma boa prática de programação.





Cara, incrível! Obrigado por ter me ajudado. Entendi tudo tudo!
GOSTEI 0
POSTAR