Polimorfismo e herança em java

é um pouco tarde mais para os proximo que lerem este topico

Plimorfismo é quando voce tem uma classe abstract ou interface é usa herança

Avo (abstract ou interface)

Fillho filho = (Filho) Avo; avo sabe ser filho

Pai pai = (Pai) Avo; pai sabe ser avo

Pai pai =(Pai) Filho; sabe ser filho

quer dizer que filho pode ser um avo desde que tenha a mesma instancia

avo pode ser todo mundo pois todos são herdeiros do mesmo

Avo avo = (Avo) Pai;
avo.seuPai();metodo so de pai
Avo avo = (Avo) Filho;
avo.seuFilho();metodo so de filho

Olá!

Alguém pode me ajudar? Por que no código abaixo, aparece o erro:

[quote]Exception in thread “main” java.lang.ClassCastException: polimorfismo.Filho cannot be cast to polimorfismo.Neto
at polimorfismo.Main.main(Pai.java:32)[/quote]

package polimorfismo;

public class Pai 
{	
	void Polimorfismo()
	{
		System.out.println("Chama função PAI");
	}
}

class Filho extends Pai
{
	protected void Polimorfismo()
	{
		System.out.println("Chama função FILHO");		
	}
}

class Neto extends Filho
{
	public void Polimorfismo()
	{
		System.out.println("Chama função NETO");
	}
}

class Main
{
	public static void main(String[] args) 
	{
		Pai pai = new Filho();
		((Neto)pai).Polimorfismo();
	}
}

ViniGodoy…

Você sabe me dizer o porquê a função main acima não chama a função “Polimorfismo” em “Pai” se eu trocar a main por:

Filho filho = new Neto();
((Pai)filho).Polimorfismo();

Você só pode fazer casts válidos.

No seu caso, você criou um objeto do tipo Filho. E um Filho não é um Neto. Logo, o caso não é possível.

É verdade…desculpe a minha falta de atenção!!

Obrigado!

ViniGodoy…

Você sabe me dizer o porquê a função main acima não chama a função “Polimorfismo” em “Pai” se eu trocar a main por:

Filho filho = new Neto(); ((Pai)filho).Polimorfismo();

Por que o objeto que está na referência do tipo Pai é um Neto.

Seu exemplo não está ajudando. Vamos usar uma analogia melhor:

[code]//Estou apontando para um gatinho
Animal animal = new Gato();

//Que barulho faz o animal que eu aponto?
animal.barulho();[/code]

O polimorfismo é justamente isso. A capacidade que a variável de referência tem de alterar sua chamada de método de acordo com o objeto que está dentro dela. Note que o barulho do animal é “miau” se o animal for um gato, mas será “auau”, se ele for um cachorro.

Animal animal = new Cachorro(); //Agora estou apontando para um cachorrinho animal.barulho(); //Mesma pergunta, resposta diferente

Vlw!

Engraçado a analogia!

[quote=ateubh]poliformismo é quando vc tem mais de um método com o mesmo nome mas com a assinatura diferente.

[code]
public double quadrado(int numero) {
return (double) numero * numero;
}

public double quadrado(double numero) {
return numero * numero;
}
[/code][/quote]

tá sabendo legal vc! kkkkkkkkkkkkkkk
isso não é polimorfismo não, amigo, isso que você descreveu é Sobrecarga.

Herança:

     é uma classe herdar (ter) todos atributos e metodos visiveis em outra classe. Exemplo:

class a {
public void metodo1() {
}

private void metodo2() {
}
}

class b extends a {
//b tem metodo1 pq herdou
//b não tem metodo2 pq não é visivel para herança
}

[quote=muldon]info_god , lembrando que esse tipo de heranca ai so funciona se ambas as classes estiverem no mesmo package, pois nao foram declaradas public.

Polimorfismo:
http://www.dca.fee.unicamp.br/cursos/PooJava/polimorf/index.html[/quote]

Claro,

   O exemplo que dei foi somente um ponta pé. Ele tera q pesquisar mais e estudar muito pra entender muito dos conceitos de orientação a objetos.