O.O &gt Polimorfismo

12 respostas
Marck

Bom dia!!

Pessoal, estudando me deparei com a seguinte dúvida:

se eu fizer:

class Jogador {
	
	public void correr(){}
}
E:
class JogadorFutebol extends Jogador{
	
	public void chutar(){}
	
        public static void main(String arg[]){
    	
    	   Jogador j = new JogadorFutebol();
    	
         }	
 
}

Pelo que li, o compilador enxerga a referência e não a instancia.

Então, não posso fazer:

j.chutar();

...por que jogador não tem o metodo chutar.

Então, para que eu faço isso??

Jogador j = new JogadorFutebol();

Obrigado
Marck

12 Respostas

ViniGodoy

Essa dúvida tem aparecido com bastante frequência por aqui.

Leia o seguinte tópico, que espero que te ajude! :wink:
http://www.guj.com.br/posts/list/55387.java

Rafael_Nunes

Para poder fazer:

Jogador j = new JogadorDeFutebol();
j.correr();
Jogador j2 = new JogadorDeBasquete();
j2.correr();

Correr é uma característica comum a todo tipo de jogador, mas chutar() e arremessar() são características específicas de cada tipo de jogador.

PS: E isto trata de Polimorfismo, não Encapsulamento.

Marck

Blza…vou dar uma olhada…

obs.: alterei o titulo do tópico para Polimorfismo.

Obrigado galera…

LPJava
Marck:
Bom dia!!

Pessoal, estudando me deparei com a seguinte dúvida:

se eu fizer:

class Jogador {
	
	public void correr(){}
}
E:
class JogadorFutebol extends Jogador{
	
	public void chutar(){}
	
        public static void main(String arg[]){
    	
    	   Jogador j = new JogadorFutebol();
    	
         }	
 
}

Pelo que li, o compilador enxerga a referência e não a instancia.

Então, não posso fazer:

j.chutar();

...por que jogador não tem o metodo chutar.

Então, para que eu faço isso??

Jogador j = new JogadorFutebol();

Obrigado
Marck

esse codigo nao compila a class Super ela nao tem o metodo da chutar(), e vc tem um objeto j do tipo Jogador e é um objeto da JogadorFutebol qdo vc tem isso quer dizer que vc ta afim de chamar os metodos que foi subscrito da class pai.. mas chutar nao existe na class pai..

Marck

camilolopes:

esse codigo nao compila a class Super ela nao tem o metodo da chutar(), e vc tem um objeto j do tipo Jogador e é um objeto da JogadorFutebol qdo vc tem isso quer dizer que vc ta afim de chamar os metodos que foi subscrito da class pai… mas chutar nao existe na class pai…

Mas não posso fazer direto:

Jogador j = new Jogador();

?

LPJava

pode sim… ele vai chamar o metodo da class jogador…

Jogado j = new Jogador();
j.chutar();
Marck

camilolopes:
pode sim… ele vai chamar o metodo da class jogador…

Jogado j = new Jogador(); j.chutar();

No caso, não tem diferença?

Desde já, agradeço.

Rafael_Nunes

Você não pode fazer isso, terá um erro em tempo de compilação porque o Jogador não definiu o método chutar()

shison

Para chamar o chutar você teria de usar um “cast”:

Jogador j = new JogadorFutebol(); JogadorFutebol jf = (JogadorFutebol) j; jf.chutar();

Marck

shison:
Para chamar o chutar você teria de usar um “cast”:

Jogador j = new JogadorFutebol(); JogadorFutebol jf = (JogadorFutebol) j; jf.chutar();

blza…ficou claro…

só uma última pergunta…

qual a diferenca entra fazer:

Jogador j = new JogadorFutebol();

e

Jogador j = new Jogador();

Valeu Galera!!!

ViniGodoy

Por que você não dá uma lida no link que eu te indiquei?

Lá eu explico exatamente a diferença das duas abordagens!!!

Marck

ViniGodoy:
Por que você não dá uma lida no link que eu te indiquei?

Lá eu explico exatamente a diferença das duas abordagens!!!

Blza…desculpa a falta de atenção…é a correria…
Eu li…agora ficou claro…
Obrigado a todos.

Abraço!!!

Criado 11 de abril de 2007
Ultima resposta 11 de abr. de 2007
Respostas 12
Participantes 5