Alguém por favor poderia me dar um exemplo de polimorfismo pra mim poder entender como ele se comporta. Se alguém tiver um exemplo de um programa iria ajudar muito. Please!!!
Polimorfismo é a possibilidade de você se referenciar a um objeto de maneiras diferentes. Por exemplo:
Digamos que você tenha uma classe Funcionario. Você então pode ter várias classes filhas de Funcionario tais como Gerente, Assistente e Estagiario, cada uma com metodos diferentes para aumentar o salario, por exemplo (Se você ainda não sabe Herança recomendo que dê antes uma olhada no assunto).
Logo, você pode se referenciar a um Gerente como gerente (que de fato ele é) mas também pode se referenciar a ele como um Funcionário (que ele também é - mais geral).
Agora suponha que você tem um método (em outra classe qualquer) que aumenta o salário de todos os funcionarios, chamando seus respectivos metodos de aumentar salario. Esse metodo pega um argumento que é um funcionário. Agora imagine o problema que nós teríamos se tivéssemos que implementar um método para cada tipo de funcionário (um para gerente, outro para assistente…).
É por isso que o polimorfismo é importante. Podemos simplesmente utilizar um unico método que pegue um objeto da classe Funcionário (já que gerente, assistente e estagiario são também funcionários).
class Qualquer {
//usando polimorfismo (apenas um método)
public void aumentaSalario(Funcionario f) {
f.aumento(); // chamo o metodo especifico de cada classe
}
// sem usar polimorfismo (um método para cada classe - repetição de código)
public void aumentaSalario(Gerente g) {
g.aumento(); // chamo o metodo especifico de Gerente
}
public void aumentaSalario(Assistente a) {
a.aumento(); // chamo o metodo especifico de Assistente
}
public void aumentaSalario(Estagiario e) {
e.aumento(); // chamo o metodo especifico deEstagiário
}
Queria pedir também pro pessoal dar uma olhada aqui na minha resposta. Me corrijam se eu estiver errado. Comecei e estudar polimorfismo semana passada .
Acho que o exemplo pode ficar mais claro aqui.
[code]class Funcionario{ // classe mae
public void aumento(){
System.out.println(“Oi, eu sou um funcionario…”);
}
}
class Gerente extends Funcionario{ // classe filha
public void aumento(){ // sobreescrevendo o metodo!
System.out.println(“Oi, eu sou O gerente!!”);
}
}
public class Qualquer{
public static void aumentaSalario(Funcionario f) {
f.aumento();
}
public static void main(String [] args){
Gerente g = new Gerente();
Funcionario f = new Funcionario();
aumentaSalario(g);
aumentaSalario(f);
}
}[/code]
mesmo que o metodo aumentaSalario aceite como parâmetro um objeto da classe funcionario, se vc passar uma classe que extende funcionario, o metodo chamado internamente sera o que pertence ao objeto, não a classe mãe.
internamente vc parece lidar com a classe funcionario, mas está lidando, no primeiro caso, com a classe gerente.
Gente eu só tenho a agradecer muito obrigada pelas dicas ajudaram muito.