Polimorfismo
Visão geral
O polimorfismo é a terceira característica da orientação a objetos após o encapsulamento e a herança.
Na vida, por exemplo, as ações de correr, gatos, cachorros e elefantes, correm de forma diferente. Outro exemplo é o movimento de voar: insetos, pássaros e aviões são diferentes quando voam. Pode-se ver que o mesmo comportamento pode ser corporificado de diferentes formas por meio de coisas diferentes. O polimorfismo descreve tal estado.
definição
Refere-se ao mesmo comportamento com várias manifestações diferentes.
premissa
- Herdar ou realizar [escolha uma das duas]
- Método de reescrita [significado: sem reescrita, sem sentido]
- A referência da classe pai aponta para o objeto da classe filha [forma de realização]
Código
O polimorfismo refletido no código é na verdade uma frase: as referências da classe pai apontam para os objetos da classe filha.
formato:
Nome da classe pai nome do objeto = nome da nova subclasse ();
ou
Nome da interface nome do objeto = novo nome da classe de implementação ();
Variável de membro e regras de acesso ao método
Variáveis de membro
1. Acesse as variáveis de membro diretamente através dos objetos da subclasse:
quem estiver do lado esquerdo do sinal de igual dará prioridade a quem for usado e, caso não esteja, procure.
2. Acesso indireto às variáveis de membro através de métodos de membro:
quem pertencer ao método será usado primeiro e, caso não seja, procure.
O mesmo que herança.
Método de membro
Quem é novo à direita dará prioridade a quem é novo, senão olhe para cima.
O mesmo que herança.
Fórmula
Variáveis de membro: compilar para a esquerda e executar para a esquerda.
Método membro: compilar e olhar para a esquerda, executar e olhar para a direita.
Os benefícios do polimorfismo
Downcast e upcast
instância de palavra-chave
Para evitar a ocorrência de ClassCastException, Java fornece a palavra-chave instanceof para verificar o tipo de variáveis de referência, o formato é o seguinte:
1. Instância do nome da variável do tipo de dados
2. Se a variável pertencer a este tipo de dados, retorne verdadeiro.
3. Se a variável não pertencer ao tipo de dados, retorna falso.
public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
animal.eat();
givePet(animal);
givePet(new Cat());
}
public static void givePet(Animal animal){
if(animal instanceof Dog){
Dog d = (Dog) animal;
d.protectHouse();
}
if(animal instanceof Cat){
Cat c = (Cat) animal;
c.catchMouse();
}
}
}