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
Download

Classe Caminhao