Herança e Polimorfismo
P. O. O.
Prof. Ângela e Grace
Exercício – Classe Caminhão
Subclasse Caminhao estende Veiculo
–
Atributos específicos
–
Métodos
2
Capacidade
Número de eixos
Construtor
Sets e gets
Impressão dos dados do caminhão
Classe Caminhao
Atributos
específicos
construtor da
super classe
3
Classe Caminhao (cont.)
Atributos herdados
4
Teste – Classe Caminhao
Reescrito na subclasse:
isso é sobrecarga?
5
Relembrando...
6
O que é Sobrecarga?
–
Recurso que permite que vários métodos sejam
definidos com mesmo nome.
–
Obrigatório diferentes parâmetros: quantidade,
tipos ou ordem dos argumentos.
–
Define vários métodos semelhantes de acordo
com a necessidade, inclusive construtores.
Polimorfismo
7
“Propriedade de se apresentar sob muitas
formas”
Mesmo método chamado (invocado) pode
ter diferentes resultados
Depende do tipo do objeto que invocou o
método
Polimorfismo
8
Classe veículo possui método imprime()
Classes carro/ caminhao herdam método
imprime()
Redefinição do método (para carro e
caminhao) provoca diferentes resultados
quando o mesmo método é invocado
Definição de Polimorfismo
9
Princípio pelo várias classes derivadas de uma
mesma superclasse podem invocar métodos que
têm a mesma identificação (assinatura) mas
comportamentos distintos.
É necessária a redefinição de métodos com mesma
identificação, porém, não deve ser confundido com o
mecanismo de sobrecarga de métodos.
Exemplo – Frota de veículos
Algoritmo
–
–
Solicita quantidade de veículos (n)
Leitura de n veículos
–
10
Solicita tipo de veiculo
Solicita dados de acordo com o tipo
Armazena em vetor de tamanho n
Imprime dados de n veículos armazenados no
vetor (polimorfismo)
Qual o tipo do vetor? Veículo? Carro?
Caminhão?
Ligação tardia
11
Veremos que o método pode ser invocado a partir de
uma referência a um objeto do tipo da superclasse,
apesar de, na prática, ser uma instância da subclasse.
Neste caso, a decisão sobre qual o método que deve
ser selecionado, de acordo com o tipo da classe
derivada, é tomada em tempo de execução, através
do mecanismo de ligação tardia.
Ex: Frota de veículos;
Classe Frota (parte 1 de 3)
Usa classe Scanner
Início da classe Frota
Declaração
de Variáveis
Tamanho da Frota
Loop para entrada de dados
12
Classe Frota (parte 2 de 3)
Dados comuns a
qualquer veiculo
Dados objeto Carro
13
Classe Frota (parte 3 de 3)
Caminhão
Tipo não identificado: veículo
Polimorfismo
14
Classe Abstrata
15
Classes demasiadamente gerais para criar objetos reais.
Utilizadas somente como superclasses abstratas para
subclasses concretas
Declara atributos e comportamentos comuns das várias
classes em uma hierarquia.
Em geral, uma classe abstrata contém um ou mais
métodos abstratos
Atributos e métodos concretos de uma classe abstrata
estão sujeitos às regras normais da herança.
Palavra-chave abstract
Utilizada para declarar uma classe abstrata.
Utilizada para declarar um método abstrato:
16
–
Classes abstratas contêm um ou mais métodos abstratos.
–
Todas as subclasses concretas devem sobrescrever todos
os métodos abstratos herdados.
Tentar instanciar um objeto de uma classe abstrata
é um erro de compilação.
Formas geométricas
área( )
Formas
geométricas
área = π x r2
área = (b x h)/2
área = b x h
17
Classe Abstrata: Forma Geométrica
Atributos básicos
–
Métodos
–
–
–
–
18
Número de lados
Set/ get número de lados: métodos não abstratos
Área: método abstrato
Imprime(): métodos não abstratos
Precisa construtor?
Classe FormaGeometrica
Atributo protected
Método concreto
19
Classe Circulo
public class Circulo extends FormaGeometrica
{
private double raio;
// atributo especifico do circulo
public void setRaio (double raio)
{
if (raio<0) this.raio = 0;
else
this.raio = raio;
}
public Circulo (double raio)
{
setRaio(raio);
}
20
}
// construtor
Compilou?
Classe Circulo com Método Area( )
Usa classe Math
Implementa Area( )
21
Classe TesteFormas
public class TesteFormas
{
public static void main (String args[])
{
FormaGeometrica f = new FormaGeometrica();
f.imprime();
Circulo c = new Circulo(5);
c.imprime();
}
}
Funcionou?
22
Alterações
Classes abstratas não podem ser
instanciadas.
–
23
Corrigir código do teste
Como imprimir raio junto ao número de lados?
Altero em Circulo ou FormaGeometrica?
Redefinir método imprime( )
Classe Circulo - Método imprime( )
sobrescreve imprime( )
24
Mais alterações...
25
Como imprimir área da forma geométrica?
Altero na classe Círculo?
Ou na FormaGeometrica?
Redefinir método imprime( ) incluindo
área.
Alterando a superclasse
26
Exercício – Subclasse Retangulo
Atributos básicos
–
–
Métodos
–
–
–
–
27
Base
Altura
Sets/ Gets
Construtor (base, altura)
area()
imprime()
Classe Retangulo
28
Classe Retangulo (cont.)
29
Teste Formas
30
Interfaces
São modelos de comportamentos;
Definem e padronizam serviços que uma classe pode
oferecer;
Usadas para classes não relacionadas, mas com
alguns comportamentos semelhantes
–
31
Ex.: classes Fatura e Funcionário
Não são relacionadas
Ambas podem ter método calculaPagamento
Usar interface que defina esse comportamento
Usadas implementar herança múltipla
Interface Java
32
Descreve conjunto de métodos para instruir
como um objeto deve se comportar
Possui apenas métodos abstratos, ou seja,
não pode ter nenhum método implementado
Todos os membros (atributos e métodos)
devem ser public
Implementação de interface
33
Uma classe concreta pode especificar que
implementa uma ou mais interfaces;
Todos os métodos devem ser codificados;
Caso algum método não seja implementado, essa
classe deve ser abstrata;
Implementar uma interface é como assinar um
contrato!
Ex: Interfaces gráficas (GUI) => Listener
Exercício para entregar
34
Classe triângulo
Classe de teste com as 3 formas