A idéia de polimorfismo é a de um certo objeto poder ter vários comportamentos simultaneamente. Complicou ao invés de explicar?
O conceito de OO é de simplesmente representar características importantes (para um certo domínio) de entidades do mundo real em um software. Estas entidades, no mundo real, possuem suas propriedades e alguns comportamentos. Por exemplo, se você for até a sua sala de estar, provavelmente você verá alguns sofás e cadeiras. Ambos são móveis, que possuem características diferentes. Sofás são macios, confortáveis, maiores e nos permitem deitar. Já as cadeiras, normalmente não são tão confortáveis assim, são menores e são mais leves do que os sofás. Mas, tanto os sofás quanto as cadeiras, servem para um mesmo propósito (sentar), apesar de suas características (implementações) diferirem.
Mas, afinal :roll: , para que serve polimorfismo então? Uma das respostas pode ser: dar diferentes implementações para comportamentos/propósitos comuns.
Então, segundo o paradigma da OO, poderíamos modelar a sua sala da seguinte maneira:
[code]public class Movel{
//… métodos, atributos, e construtores aqui…
}
public class Sofa extends Movel{
//… inclusão de métodos/atributos/construtores adicionais
}
public class Cadeira extends Movel{
//… inclusão de métodos/atributos/construtores adicionais
}[/code]
Basicamente, é isso. Agora, quer saber como funciona?
[code]public interface Movel{
public int lugares();
public boolean isConfortavel();
//… o que mais sua imaginação quiser…
}
public class Sofa implements Movel{
private int lugares;
private boolean confortavel;
public Sofa(int lugares){
if (lugares > 0) this.lugares = lugares;
else this.lugares = 1;
confortavel = true;
}
public int lugares(){
return lugares;
}
public boolean isConfortavel(){
return confortavel;
}
}
public class Cadeira implements Movel{
private int lugares = 1;
private boolean confortavel = false;
private int pernas;
public Cadeira(int pernas){
if (pernas > 2) this.pernas = pernas;
else this.pernas = 3;
}
public int lugares(){
return lugares;
}
public boolean isConfortavel(){
return confortavel;
}
public int pernas(){
return pernas;
}
}
public class Sala{
public static void main(String[] args){
// arrumando os móveis na minha sala…
Movel[] sala = new Movel[4];
sala[0]= new Sofa(3);
sala[1]= new Sofa(2);
sala[2]= new Sofa(1);
sala[3]= new Cadeira(3);
// faz qq outra coisa …
}
}[/code]