Duvida com polimorfismo

24/05/2019

0

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

Responder

Post mais votado

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.

Sadasd

Sadasd
Responder

Mais Posts

25/05/2019

Weslley Felix

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar