Polimorfismo e herança em java

29 respostas
E

[b]
Olá pessoal alguem tem uns exemplos de herança e polimorfismo

ou ate uns tutoriais ai…

ta valendo uma explicaçãozinha tbm :!:
[/b]

29 Respostas

ateubh

poliformismo é quando vc tem mais de um método com o mesmo nome mas com a assinatura diferente.

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

public double quadrado(double numero) {
  return numero * numero;
}
J

Veja aqui uma definição de polimorfismo:

http://pt.wikipedia.org/wiki/Polimorfismo

B
ateubh:
poliformismo é quando vc tem mais de um método com o mesmo nome mas com a assinatura diferente.
public double quadrado(int numero) {
  return (double) numero * numero;
}

public double quadrado(double numero) {
  return numero * numero;
}

Isso não é polimorfismo não... sugiro ler o artigo citado do wikipedia.

t+

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

Bravox
public double quadrado(int numero) {
   return (double) numero * numero;
 }
 
 public double quadrado(double numero) {
   return numero * numero;
 }

Isso na verdade é sobrecarga de metódos !!

Bravox

akumaldo

baixeeeeeee a apostila do curso Fj-11 da caelum:
www.caelum.com.br

LPJava

henrança elias falso é quando uma classe herda caracteristica de outra classe!!

e polimormismo é o parceiro falou la em cima vc tem varios metodos com o mesmo nome porem assinaturas diferentes… se as assinaturas for = . dar erro!! temos q lembrar esse conceito! pois em java vc pode ter um metodo pelo mesmo nome porem ele n analisa pelo nome e sim pelo tipo e argumentos a serem passados ou seja assinaturas!

Seu irmao gêmeo é = a vc? não parece ser = mais tem assinaturas diferentes!! (caracteristicas).

J
ateubh:
poliformismo é quando vc tem mais de um método com o mesmo nome mas com a assinatura diferente.
public double quadrado(int numero) {
  return (double) numero * numero;
}

public double quadrado(double numero) {
  return numero * numero;
}

É, poliformismo deve ser isso mesmo....

orlandocn

heranca e polimorfismo estao diretamente ligadas.
Vamos imaginar uma classe pai FiguraPlana. Essa classe tem na sua interface um metodo como getArea por exemplo.
Agora imagine duas classes filhas de FiguraPlana: Quadrado e Circulo.
Cada classe filha vai ter sua propria sobreposicao do metodo getArea (e nao sobrecarga como citado acima erroneamente). Na implementacao de Quadrado, o metodo retorna lado * lado, enquanto em Circulo retorna PI * R^2;

Agora imagine um metodo tipo:

void imprimeArea(FiguraPlana umaFigura){

System.out.println(umaFigura.getArea())

}

O polimorfirsmo fara com que o metodo imprima o resultado de lado * lado caso seja chamado “imprimeArea(umQuadrado)” e PI * R^2 no caso de ser passado um Circulo como parametro.

Não sei se ajudei em alguma coisa, mas e mais ou menos por ai

E

pow galera vlw pela força

  • parece q as ideias ai ta meias contrarias :frowning:

fikei mei confuso , dei umaolhda no saite da wikipedia

ta fazendo uma força aki :shock:

I

Elias Faical,

O conceito de Hernaça e Polimorfismo andam juntos. Vou te dar um exemplo, e vai ficar mais fácil sua compreensão:

Imagine uma classe que tenha uma Conta Bancária Simples, chamada ContaSimples e que tenha os métodos depositar(), donodaconta(), versaldo(), retirar().
Agora vamos usar uma herança, e uma classe poupança vai herdar todos os métodos da classe Conta Simples acima, e vamos ainda adicionar um método Juros() na classe Poupança.

Acabamos de usar herança.

Polimorfismo, significa ‘muitas formas’
Agora vc pode usar o polifmorfismo, ou seja, vc vai poder usar o depositar(), tanto para a Classe Simples, quanto a para Poupança, resumindo, vc usou de 2 formas diferentes o mesmo método.

Entendeu? Qualquer coisa fala aí…

LPJava

mandou ver ai noa resposta!! parceiro boa resposta!!

E

ai galera agora clareou…camilo falsovlw em …

inicjava cara um abraço e vlw pela força

J

julianostr:
Veja aqui uma definição de polimorfismo:

http://pt.wikipedia.org/wiki/Polimorfismo

Pelo que entendi o caso citado anteriormente é sobrecarga e não polimorfismo, o segundo caso é implementado através de interface utilizando implements.

José Eduardo Damas

J

Pelo que entendi o caso anterior e sobrecarga, para implementar polimorfismo deve ser utilizado interface através de implements.

José Eduardo Damas.

ViniGodoy

Sobrecarga é considerado uma forma de polimorfismo, embora eu não tenha escrito isso quando escrevi boa parte daquele artigo na wikipedia. Em C++ tem ainda outro tipo, criado através de templates.

Mas no caso do java e da OO, usa a definição da wiki que não tem erro.

viniciusalvess

Esse tópico para iniciantes é muito bom ! estão de parabéns os esclarecedores.

sergiotaborda

Polimorfismo têm vários sabores e os relacionados a herança não só os que tem.

http://sergiotaborda.wordpress.com/java/oo/polimorfismo/

J

um exemplo legal é esse:

class Empregado{
void trabalhar(){
  }
}

class Gerente extends Empregado{

void gerenciar(){
   System.out.print("gerente gerenciando");
}

}

class Diretor extends Gerente{

void planejar(){
System.out.print("planejando");
}

}

bem o código acima mostra que diretor tem acesso aos métodos de gerente e empregado, até mesmo porque ele extends empregado e gerente,não confunda com herança dupla, até porque java não permite, é só seguir a árvore hierárquica, isso cai no conceito de herança "é um", diretor é um empregado e é um gerente também, ou seja, tem acesso aos métodos destas classes.

osbornehell

é 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
ECO2004

Olá!

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

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

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();
ViniGodoy

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.

ECO2004

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

Obrigado!

ECO2004

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();

ViniGodoy

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:

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

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

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
ECO2004

Vlw!

Engraçado a analogia!

A
ateubh:
poliformismo é quando vc tem mais de um método com o mesmo nome mas com a assinatura diferente.
public double quadrado(int numero) {
  return (double) numero * numero;
}

public double quadrado(double numero) {
  return numero * numero;
}

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

I

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

}
I

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

Claro,

O exemplo que dei foi somente um ponta . Ele tera q pesquisar mais e estudar muito pra entender muito dos conceitos de orientação a objetos.
Criado 26 de julho de 2006
Ultima resposta 26 de jul. de 2006
Respostas 29
Participantes 19