Polimorfismo

4 respostas
M

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!!!

4 Respostas

T

http://www.portaljava.com/home/modules.php?name=Content&pa=showpage&pid=85

B

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 :smiley: .

peczenyj

Acho que o exemplo pode ficar mais claro aqui.

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

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.

M

Gente eu só tenho a agradecer muito obrigada pelas dicas ajudaram muito.

Criado 5 de junho de 2006
Ultima resposta 6 de jun. de 2006
Respostas 4
Participantes 4