Duvida com polimorfismo
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:
// por que eu posso fazer assim ?
dos dois jeitos acima, deu certo. Mas assim não :
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?
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
Curtidas 0
Melhor post
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.
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
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.
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