dúvida sobre Polimorfismo

7 respostas
leandroleo

Olá pessoal, é o seguinte…

digamos que eu tenha uma classe Pessoa, que seria minha SUPERCLASSE.
e eu criei uma SUBCLASSE Professor.

O que acontece, quando eu instancio da seguinte maneira:

Pessoa obj = new Professor();

Não consegui entender no livro.

vlw.

7 Respostas

ONHATE

A variável é do tipo Pessoa, mas você consegue acessar métodos e propriedades de um Professor fazendo

((Professor)obj).

sem ter problemas de NullPointerException pq obj é do tipo Pessoa mas aponta para um Professor.

Diegomoco

Bom não sou tão experiente assim em java, mas um pouco eu sei.

Intenciando desse modo que você citou, você usa normalmente.

Uma das vantagens do polimorfismo é que você não precisa ficar criando os atributos em comum para as classes filhas.

Por exemplo:

Professor e aluno, são todos pessoas e todos precisarão dos atributos, nome, idade, sexo. Fazendo como você fez ele já tem por herança esses atributos.

Tem muito mais coisas que não sei explicar, jaja aparece alguém mais experiente que eu pra te ajudar.

renanreismartins

nosso amigo Diegomoco explicou muito bem…

com isso vc pode acessar tambem todos os metodos da classe Pessoa normalmente.

poderia passar esses conceitos por aqui… mas para ser mais pratico aconselho a leitura desse topico na apostila fj-11 da caelum http://www.caelum.com.br

caso nao entenda ou tenha duvidas volte a postar

abrassss

java_es_a_lei

assim como disse o renanreismartins
le a apostila inteira se vc esta começando com Orientação a Objetos em java é uma boa bagagem ja lendo ela vc vai conseguir dechar mais ainda seu codigo orientado a objetos e intender mais sobre polimorfismo herança e class abstratas

flow

sergiotaborda

leandroleo:
Olá pessoal, é o seguinte…

digamos que eu tenha uma classe Pessoa, que seria minha SUPERCLASSE.
e eu criei uma SUBCLASSE Professor.

O que acontece, quando eu instancio da seguinte maneira:

Pessoa obj = new Professor();

É preciso entender que essa linha faz 3 coisas.

  1. Declara uma variável do tipo Pessao (Pessoa obj)
  2. cria uma instancia de Professor (new Professor())
  3. atribui o objecto pessoa à variável do tipo Pessoa.

A regra é : só podemos atribuir objetos a variáveis que tenham o mesmo tipo ou ele seja mais genérico.

Como professor herda de pessoa , pessoa é mais genérico e portanto tudo bem.
O inverso, veja-se, não é possivel.

Professor obj = new Pessoa();  // dá erro
ONHATE
sergiotaborda:
[code]Professor obj = new Pessoa(); // dá erro
E porque dá erro? Pq "new Pessoa()" não, digamos, "preecheria" todo o objeto Professor, então quando tentasse acessar métodos de um professor que uma pessoa não tem, exemplo lecionar(), daria exeção... Ao contrário da certo pq um "new Professor()", "preenche" uma Pessoa pq ele é uma pessoa, ele tem tudo de uma Pessoa e mais um pouco...

Isso foi meio que um analogia...

sergiotaborda
ONHATE:
sergiotaborda:
[code]Professor obj = new Pessoa(); // dá erro
E porque dá erro? Pq "new Pessoa()" não, digamos, "preecheria" todo o objeto Professor, então quando tentasse acessar métodos de um professor que uma pessoa não tem, exemplo lecionar(), daria exeção... Ao contrário da certo pq um "new Professor()", "preenche" uma Pessoa pq ele é uma pessoa, ele tem tudo de uma Pessoa e mais um pouco...

Isso foi meio que um analogia...

Sim, em termos de analogia vc pode entender dessa forma.
A forma canónica é dizer que : Um professor é uma pessoa, mas uma pessoa não é um professor.
Então a variável pessoa pode conter qualquer pessoa, incluse um professor porque ele é uma pessoa.
Uma variável professor pode conter qualquer professor, mas não uma pessoa, porque uma pessoa não é um professor.

O verbo ser reflete a relação de identidade necessária para que a variável polimorfica aceite o objeto.
É por isso que a Herança está relacionada a aquilo que o objecto É.

Criado 10 de setembro de 2009
Ultima resposta 11 de set. de 2009
Respostas 7
Participantes 6