Polimorfismo (Java)
Ensaios: Polimorfismo (Java). Pesquise 862.000+ trabalhos acadêmicosPor: hinnata • 7/9/2014 • 1.095 Palavras (5 Páginas) • 305 Visualizações
Polimorfismo
É o mecanismo que permite chamar métodos com a mesma assinatura, mas com comportamentos diferentes, usando a mesma variável objeto e sem determinar, em tempo de compilação, a qual subclasse ou superclasse o objeto pertence. O método correto será acionado dependendo do objeto referenciado em tempo de execução.
Para que o polimorfismo funcione deve-se declarar uma variável objeto cujo tipo é a superclasse, pois esta variável pode referenciar tanto objetos da superclasse como de qualquer subclasse. A identificação correta de qual método deverá ser invocado é realizada pela JVM, a qual verifica qual é o objeto real que a variável está referenciando para acionar o método adequado.
Exemplo:
package principal;
import subClasses.Cliente;
import subClasses.Funcionario;
import superClasse.Pessoa;
public class Main {
public static void main(String[] args) {
Pessoa pessoas[] = new Pessoa[4];
int indice = 0;
pessoas[indice] = new Funcionario(1200);
indice++;
pessoas[indice] = new Funcionario(2400);
indice++;
pessoas[indice] = new Cliente("111.111.111-11");
indice++;
pessoas[indice] = new Cliente("222.222.222-22");
indice++;
System.out.println("Esses são os dados dos funcionários e clientes:\n");
for (indice = 0; indice < 4; indice++) {
System.out.println(pessoas[indice]);
}
}
}
O polimorfismo está na declaração de um vetor de objetos do tipo Pessoa (não precisa ser um vetor).
No entanto, note que "dentro" desse vetor, onde foram criadas 4 referências de superclasse,duas posições foram instanciadas como objetos Funcionários e o restante, como Cliente. Ambas as classes herdam Pessoa.
Note que os métodos toString() (invocados de maneira implí¬cita) de cada uma das classes apresentaram resultados diferentes, ou seja: não foi chamado o toString() de Pessoa, mas das outras classes.
Assim, pode-se dizer que A PARTIR DE UMA REFERÊNCIA DE UMA SUPERCLASSE, É POSSÍVEL REFERENCIAR SUBCLASSES E CHAMAR - APENAS - MÉTODOS COMUNS AS DUAS.
O fato do toString() das subclasses serem executados ao invés do toString() de Pessoa, deve-se ao Overriden.
package superClasse;
public class Pessoa {
private String nome;
private String sobrenome;
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @param nome the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* @return the sobrenome
*/
public String getSobrenome() {
return sobrenome;
}
/**
* @param sobrenome the sobrenome to set
*/
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
// @Override
public String toString(){
return String.format("%s%s\n",
"Nome : ",
this.getNome());
}
}
package subClasses;
import superClasse.Pessoa;
public class Cliente extends Pessoa{
private String cpf;
...