3. Polimorfismo
Permite que subclasses possuam métodos iguais
(com a mesma assinatura) de uma superclasse, mas
com comportamentos diferentes;
As implementações de tais métodos são redefinidas
nas classes-filhas;
Classes-filha (subclasses) herdam implementações
da classe-pai (superclasse) de acordo com uma
hierarquia;
3
6. Exercício
• Etapa 1 – Preparação do Domínio
Crie uma pasta em htdocs chamada
polimorfismo;
Na pasta polimorfismo, crie uma pasta chamada
classes;
6
7. Polimorfismo
Etapa 2: Crie as seguintes classes na pasta
polimorfismo/classes :
7
Conta
# saldo: double
+ deposita(double)
+ saca(double)
+ imprimeExtrato()
ContaCorrente
+ deposita(double)
ContaPoupanca
OBS: Crie os métodos
get e set necessários. Construtores
podem ser criados.
OBS: O método deposita
da
Subclasse ContaCorrente
Deverá descontar uma
taxa de 10 centavos em
cada depósito.
8. Exercício
• Etapa 3 – Criação do script index.php na pasta
polimorfismo
O script deverá criar um objeto para cada tipo de conta;
Em seguida, o script deverá definir o saldo inicial de R$
200,00 na conta corrente e R$ 500,00 na poupança;
Após a definição do valor inicial de cada conta, saque R$
100,00 de cada conta;
O script deverá executar o método imprimeExtrato de
cada conta, exibindo seu saldo final;
8
10. Classes Abstratas
Classes estruturais que servem de base para outras
classes;
Não podem ser instanciadas (terem objetos)
Apenas as subclasses poderão ser instanciadas;
Usamos a palavra reservada abstract na assinatura
de uma classe para torná-la abstrata;
10
13. Classes Abstratas
Considere o exemplo anterior:
13
Figura
# x: double
# y: double
+ mostraArea()
Triangulo
+ mostraArea()
Quadrado
+ mostraArea()
A classe Figura não
era instanciada (não
criamos objetos dessa
classe)
Definida apenas para
questões de herança
e polimorfismo
14. Classes Abstratas
Considere o exemplo anterior:
14
Figura
# x: double
# y: double
+ mostraArea()
Triangulo
+ mostraArea()
Quadrado
+ mostraArea()
Tal classe é uma forte
candidata a ser uma
classe abstrata!
16. Métodos Abstratos
Métodos que possui apenas assinaturas,
implementados em classes abstratas;
Não possuem lógica! Apenas assinaturas;
Faz com que as classes-filha sejam obrigadas a
definir as implementações dos métodos abstratos;
Impõem o polimorfismo às subclasses!
Usamos a palavra reservada abstract na assinatura
de um método para torná-la abstrata;
16
19. Métodos Abstratos
Considere o exemplo anterior:
19
Figura
# x: double
# y: double
+ mostraArea()
Triangulo
+ mostraArea()
Quadrado
+ mostraArea()
O método
mostraArea() “não
fazia nada” (não
possuía instruções a
serem executadas)
Definida apenas para
questões de
polimorfismo
20. Métodos Abstratos
Considere o exemplo anterior:
20
Figura
# x: double
# y: double
+ mostraArea()
Triangulo
+ mostraArea()
Quadrado
+ mostraArea()
Tal método é um forte
candidato a ser um
método abstrato!
22. Exercício
• Etapa 1 – Preparação do Domínio
Crie uma pasta em htdocs chamada abstratos;
Na pasta abstratos, crie uma pasta chamada
classes;
22
23. Exercício
Etapa 2: Crie as seguintes classes na pasta
abstratos/classes :
23
Animal
# come: String
+ habitoAlimentar()
Carnivoro
+ habitoAlimentar()
Herbivoro
+ habitoAlimentar()
OBS: Crie os métodos
get, set e construtores caso sejam
necessários.
OBS: O método
habitoAlimentar()
simplesmente imprime na
tela o hábito alimentar de
cada animal.
Classe abstrata
Método abstrato
24. Exercício
• Etapa 3 – Criação do script index.php na pasta
abstratos
O script deverá criar um objeto para cada tipo de animal;
Em seguida, o script deverá definir o hábito alimentar do
carnívoro para “carne” e do herbívoro para “legumes”;
O script deverá exibir o método alimentar de cada animal;
24