Olá
Tive uma aula hj sobre poliformismo e acabei não entendo o conceito…vocês podem me ajudar??
eu pesquisei na net, mais é muito técnico e se puderem postar um exemplinho basico já iria me ajudar.
desde já agradeço a ajuda!!
Olá
Tive uma aula hj sobre poliformismo e acabei não entendo o conceito…vocês podem me ajudar??
eu pesquisei na net, mais é muito técnico e se puderem postar um exemplinho basico já iria me ajudar.
desde já agradeço a ajuda!!
Polimorfismo, significa muitas formas.
Na prática, você pode herdar uma classe Pai para gerar Filho. Ex.: public class Filho extends Pai {…}.
Como há herança, você pode praticar o polimosfimo mais ou menos assim:
Pai p = new Pai();
System.out.println(p.getNome());
// Resultado: Nome do pai
p = new Filho();
System.out.println(p.getNome());
// Resultado: Nome do filho
Filho f = (Filho) p;
System.out.println(f.getNome());
// Resultado: Nome do filho
p = f;
System.out.println(p.getNome());
Para mais, é melhor pesquisar sobre herança e polimorfismos em O.O.
wiliamps
Polimorfismo, significa muitas formas.Na prática, você pode herdar uma classe Pai para gerar Filho. Ex.: public class Filho extends Pai {...}.
Como há herança, você pode praticar o polimosfimo mais ou menos assim:
Pai p = new Pai();
System.out.println(p.getNome());// Resultado: Nome do pai
p = new Filho();
System.out.println(p.getNome());// Resultado: Nome do filho
Filho f = (Filho) p;
System.out.println(f.getNome());// Resultado: Nome do filho
p = f;
System.out.println(p.getNome());Para mais, é melhor pesquisar sobre herança e polimorfismos em O.O.
wiliamps
http://oracle2java.blogspot.com.br/
Poli = Muitos
Morfos = formas.
O conceito de polimorfismo está implicitamente ligado ao de herança, o que, na prática, não é todo errado, porém, esquecemos que existe, ainda, a relação de implementação.
Vamos aos casos.
Considere a classe FiguraGeometrica. Como sabemos, toda figura geométrica possui uma área e um perímetro. A forma de calcular a área de uma figura varia de acordo com o tipo de figura que temos.
public class FiguraGeometrica{
public float calcularArea(){
return 0;
}
public float calcularPerimetro(){
return 0;
}
}
Um quadrado é uma figura geométrica. Logo, podemos dizer que ele estende a figura geométrica.
A área do quadrado é determinada pela equação l² e seu perímetro pela equação l * 4
public class Quadrado extends FiguraGeometrica{
private float lado;
public Quadrado(float lado){
super();
this.lado = lado;
}
@Override
public float calcularArea(){
return lado*lado;
}
@Override
public float calcularPerimetro(){
return 4 * lado;
}
}
Um círculo também é uma figura geométrica, cujo cálculo da área depende de pi (cujo valor aproximado é 3,141516) e tem a equação pi * raio² e cujo perímetro (circunferência) é calculado com 2 * pi * raio.
public class Circulo extends FiguraGeometrica{
private static final float PI = 3.141516F;
private float raio;
public Quadrado(float raio){
super();
this.raio = raio;
}
@Override
public float calcularArea(){
return PI * (raio * raio);
}
@Override
public float calcularPerimetro(){
return 2 * PI * raio;
}
}
Viu?
Como os métodos calcularArea e calcularPerimetro são herdados por circulo e quadrado, mas possuem implementações diferentes, chamamos de polimorfismo.
Porém, temos uma outra forma de polimorfismo, mais inteligente e abrangente, que é com a implementação.
Considere a classe Pessoa.Toda pessoa possui um nome e pode fazer diversas coisas ao longo da vida. Uma delas é ser estudante.Como estudante, uma pessoa pode cursar o ensino fundamental, médio, superior ou ir além disso. Ainda como estudante, ela deverá realizar provas a fim de ser aprovada.
Podemos dizer que estudante é uma interface que modifica as características de uma pessoa.
public interface Estudante{
public void informaSerie();
public boolean vaiBemNaProva();
}
E a classe Pessoa
public class Pessoa{
public String nome;
//getters e setters de nome
}
E a implementação de Estudante, quando no ensino médio
public class EstudanteSecundarista extends Pessoa implements Estudante {
public boolean bomAluno;
public EstudanteSecundarista(boolean bomAluno){
this.bomAluno = bomAluno;
}
@Override
public void informaSerie(){
System.out.println("1° ao 3° ano do ensino médio");
}
@Override
public boolean vaiBemNaProva(){
return bomAluno == true ? true : false;
}
}
E também podemos ter o estudante de graduação
public class Graduando extends Pessoa implements Estudante {
private boolean bomAluno;
private boolean cola;
public Graduando(boolean bomAluno, boolean cola){
this.bomAluno = bomAluno;
this.cola = cola;
}
@Override
public void informaSerie(){
System.out.println("Em algum lugar do curso superior");
}
@Override
public boolean vaiBemNaProva(){
if(bomAluno || cola){
return true;
}
return false;
}
}
Perceba que eu consigo ser mais abrangente quando utilizo uma interface e, mesmo assim, consigo utilizar polimorfismo.
Ficou claro agora?
Pelo menos use a tag [code] para formatar as respostas com código. Coisa mais horrível de se ler...
Você tem razão. Minha resposta deu algum problema no post, pois tinha feito tudo certo.
Desta vez, foi mal galera.
Uma vez postaram esse link aqui no forum:
Veja se isso responde a sua pergunta.
Eu achei ele muito bom.
Poli = Muitos
Morfos = formas.O conceito de polimorfismo está implicitamente ligado ao de herança, o que, na prática, não é todo errado, porém, esquecemos que existe, ainda, a relação de implementação.
Vamos aos casos.
Considere a classe FiguraGeometrica. Como sabemos, toda figura geométrica possui uma área e um perímetro. A forma de calcular a área de uma figura varia de acordo com o tipo de figura que temos.public class FiguraGeometrica{ public float calcularArea(){ return 0; } public float calcularPerimetro(){ return 0; } }Um quadrado é uma figura geométrica. Logo, podemos dizer que ele estende a figura geométrica.
A área do quadrado é determinada pela equação l² e seu perímetro pela equação l * 4public class Quadrado extends FiguraGeometrica{ private float lado; public Quadrado(float lado){ super(); this.lado = lado; } @Override public float calcularArea(){ return lado*lado; } @Override public float calcularPerimetro(){ return 4 * lado; } }Um círculo também é uma figura geométrica, cujo cálculo da área depende de pi (cujo valor aproximado é 3,141516) e tem a equação pi * raio² e cujo perímetro (circunferência) é calculado com 2 * pi * raio.
public class Circulo extends FiguraGeometrica{ private static final float PI = 3.141516F; private float raio; public Quadrado(float raio){ super(); this.raio = raio; } @Override public float calcularArea(){ return PI * (raio * raio); } @Override public float calcularPerimetro(){ return 2 * PI * raio; } }Viu?
Como os métodos calcularArea e calcularPerimetro são herdados por circulo e quadrado, mas possuem implementações diferentes, chamamos de polimorfismo.
Porém, temos uma outra forma de polimorfismo, mais inteligente e abrangente, que é com a implementação.Considere a classe Pessoa.Toda pessoa possui um nome e pode fazer diversas coisas ao longo da vida. Uma delas é ser estudante.Como estudante, uma pessoa pode cursar o ensino fundamental, médio, superior ou ir além disso. Ainda como estudante, ela deverá realizar provas a fim de ser aprovada.
Podemos dizer que estudante é uma interface que modifica as características de uma pessoa.public interface Estudante{ public void informaSerie(); public boolean vaiBemNaProva(); }E a classe Pessoa
public class Pessoa{ public String nome; //getters e setters de nome }E a implementação de Estudante, quando no ensino médio
public class EstudanteSecundarista extends Pessoa implements Estudante { public boolean bomAluno; public EstudanteSecundarista(boolean bomAluno){ this.bomAluno = bomAluno; } @Override public void informaSerie(){ System.out.println("1° ao 3° ano do ensino médio"); } @Override public boolean vaiBemNaProva(){ return bomAluno == true ? true : false; } }E também podemos ter o estudante de graduação
public class Graduando extends Pessoa implements Estudante { private boolean bomAluno; private boolean cola; public Graduando(boolean bomAluno, boolean cola){ this.bomAluno = bomAluno; this.cola = cola; } @Override public void informaSerie(){ System.out.println("Em algum lugar do curso superior"); } @Override public boolean vaiBemNaProva(){ if(bomAluno || cola){ return true; } return false; } }Perceba que eu consigo ser mais abrangente quando utilizo uma interface e, mesmo assim, consigo utilizar polimorfismo.
Ficou claro agora?
drsmachado
Excelente resposta, parabéns … para se aprofundar nos exemplos sobre implementação, aconselho a dar uma olhada em alguns blogs publicados no site do caelum, iria colocar o link aqui , mas no meu trampo estão bloqueando o acesso … valeu…
Poli = Muitos
Morfos = formas.O conceito de polimorfismo está implicitamente ligado ao de herança, o que, na prática, não é todo errado, porém, esquecemos que existe, ainda, a relação de implementação.
Vamos aos casos.
Considere a classe FiguraGeometrica. Como sabemos, toda figura geométrica possui uma área e um perímetro. A forma de calcular a área de uma figura varia de acordo com o tipo de figura que temos.public class FiguraGeometrica{ public float calcularArea(){ return 0; } public float calcularPerimetro(){ return 0; } }Um quadrado é uma figura geométrica. Logo, podemos dizer que ele estende a figura geométrica.
A área do quadrado é determinada pela equação l² e seu perímetro pela equação l * 4public class Quadrado extends FiguraGeometrica{ private float lado; public Quadrado(float lado){ super(); this.lado = lado; } @Override public float calcularArea(){ return lado*lado; } @Override public float calcularPerimetro(){ return 4 * lado; } }Um círculo também é uma figura geométrica, cujo cálculo da área depende de pi (cujo valor aproximado é 3,141516) e tem a equação pi * raio² e cujo perímetro (circunferência) é calculado com 2 * pi * raio.
public class Circulo extends FiguraGeometrica{ private static final float PI = 3.141516F; private float raio; public Quadrado(float raio){ super(); this.raio = raio; } @Override public float calcularArea(){ return PI * (raio * raio); } @Override public float calcularPerimetro(){ return 2 * PI * raio; } }Viu?
Como os métodos calcularArea e calcularPerimetro são herdados por circulo e quadrado, mas possuem implementações diferentes, chamamos de polimorfismo.
Porém, temos uma outra forma de polimorfismo, mais inteligente e abrangente, que é com a implementação.Considere a classe Pessoa.Toda pessoa possui um nome e pode fazer diversas coisas ao longo da vida. Uma delas é ser estudante.Como estudante, uma pessoa pode cursar o ensino fundamental, médio, superior ou ir além disso. Ainda como estudante, ela deverá realizar provas a fim de ser aprovada.
Podemos dizer que estudante é uma interface que modifica as características de uma pessoa.public interface Estudante{ public void informaSerie(); public boolean vaiBemNaProva(); }E a classe Pessoa
public class Pessoa{ public String nome; //getters e setters de nome }E a implementação de Estudante, quando no ensino médio
public class EstudanteSecundarista extends Pessoa implements Estudante { public boolean bomAluno; public EstudanteSecundarista(boolean bomAluno){ this.bomAluno = bomAluno; } @Override public void informaSerie(){ System.out.println("1° ao 3° ano do ensino médio"); } @Override public boolean vaiBemNaProva(){ return bomAluno == true ? true : false; } }E também podemos ter o estudante de graduação
public class Graduando extends Pessoa implements Estudante { private boolean bomAluno; private boolean cola; public Graduando(boolean bomAluno, boolean cola){ this.bomAluno = bomAluno; this.cola = cola; } @Override public void informaSerie(){ System.out.println("Em algum lugar do curso superior"); } @Override public boolean vaiBemNaProva(){ if(bomAluno || cola){ return true; } return false; } }Perceba que eu consigo ser mais abrangente quando utilizo uma interface e, mesmo assim, consigo utilizar polimorfismo.
Ficou claro agora?
Cara muito boa sua AULA, parabens entendi perfeitamente…muito obrigado drsmachado
Abs 
a titulo de curiosidade, não tem a ver com o tópico...
public boolean vaiBemNaProva(){
return bomAluno == true ? true : false;
}
public boolean vaiBemNaProva(){
if(bomAluno || cola){
return true;
}
return false;
}
da pra se fazer assim... fica mais limpinho
public boolean vaiBemNaProva(){
return bomAluno;
}
public boolean vaiBemNaProva(){
return (bomAluno || cola);
}
faltou a parte polimorfica:
public class Polimorfismo {
public void poliArgumento(Estudante e){ //recebo uma interface
//o java automaticamente descobre qual a classe implementou a interface
//executa cada método de acordo com a classe especifica. de forma polimorfica
e.informaSerie(); // PoliMétodo
if(e.vaiBemNaProva()){ // PoliMétodo
System.out.println("sim");
}
else {
System.out.println("não");
};
}
}
e o teste:
public class TestClass {
public static void main(String args[]) {
//estou criando 2 objetos usando como tipo a interface Estudante
//na hora da criação eu coloco qual vai ser o tipo especifico da Classe.
Estudante graduando = new Graduando(false,false);
Estudante estudante = new EstudanteSecundarista(true);
Polimorfismo poli = new Polimorfismo();
//estou passando 2 objetos de tipos distintos
//porém que são aceitos pois implementam a mesma interface
poli.poliArgumento(graduando);
poli.poliArgumento(estudante);
}
}
a titulo de curiosidade, não tem a ver com o tópico...Não querendo te contradizer, o que você disse está correto.public boolean vaiBemNaProva(){ return bomAluno == true ? true : false; } public boolean vaiBemNaProva(){ if(bomAluno || cola){ return true; } return false; }da pra se fazer assim... fica mais limpinho
public boolean vaiBemNaProva(){ return bomAluno; } public boolean vaiBemNaProva(){ return (bomAluno || cola); }
É que como alguns sabem o drsmachado também dá aula, e como ele deve ter visto, um código como o seu pode confundir muito a cabeça dos alunos.
Pra quem está querendo aprender e entender, quanto mais detalhado melhor :)
a titulo de curiosidade, não tem a ver com o tópico...Não querendo te contradizer, o que você disse está correto.public boolean vaiBemNaProva(){ return bomAluno == true ? true : false; } public boolean vaiBemNaProva(){ if(bomAluno || cola){ return true; } return false; }da pra se fazer assim... fica mais limpinho
public boolean vaiBemNaProva(){ return bomAluno; } public boolean vaiBemNaProva(){ return (bomAluno || cola); }É que como alguns sabem o drsmachado também dá aula, e como ele deve ter visto, um código como o seu pode confundir muito a cabeça dos alunos.
Pra quem está querendo aprender e entender, quanto mais detalhado melhor :)
ele esta certo.
foi apenas a título de curiosidade.