herança e polimorfismo p. o. o. prof. Ângela e grace
TRANSCRIPT
Herança e Polimorfismo
P. O. O.
Prof. Ângela e Grace
2
Exercício – Classe Caminhão
Subclasse Caminhao estende Veiculo– Atributos específicos
Capacidade Número de eixos
– Métodos Construtor Sets e gets Impressão dos dados do caminhão
3
Classe Caminhao
Atributos específicos
construtor da super classe
4
Classe Caminhao (cont.)
Atributos herdados
5
Teste – Classe Caminhao
Reescrito na subclasse: isso é sobrecarga?
6
Relembrando...
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.
7
Polimorfismo
“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
8
Polimorfismo
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
9
Definição de Polimorfismo
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.
10
Exemplo – Frota de veículos
Algoritmo– Solicita quantidade de veículos (n)– Leitura de n veículos
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?
11
Ligação tardia
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;
12
Classe Frota (parte 1 de 3)Usa classe ScannerInício da classe Frota
Declaração de Variáveis
Tamanho da Frota
Loop para entrada de dados
13
Classe Frota (parte 2 de 3)
Dados comuns a qualquer veiculo
Dados objeto Carro
14
Classe Frota (parte 3 de 3)Caminhão
Tipo não identificado: veículo
Polimorfismo
15
Classe Abstrata
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.
16
Palavra-chave abstract
Utilizada para declarar uma classe abstrata.
Utilizada para declarar um método abstrato:– 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.
17
Formas geométricas
Formas geométricas
área( )
área = (b x h)/2
área = b x h
área = π x r2
18
Classe Abstrata: Forma Geométrica
Atributos básicos– Número de lados
Métodos– Set/ get número de lados: métodos não abstratos– Área: método abstrato– Imprime(): métodos não abstratos– Precisa construtor?
19
Classe FormaGeometrica
Atributo protected
Método concreto
20
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) // construtor { setRaio(raio); }
} Compilou?
21
Classe Circulo com Método Area( )
Usa classe Math
Implementa Area( )
22
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?
23
Alterações
Classes abstratas não podem ser
instanciadas.– Corrigir código do teste
Como imprimir raio junto ao número de lados?
Altero em Circulo ou FormaGeometrica?
Redefinir método imprime( )
24
Classe Circulo - Método imprime( )
sobrescreve imprime( )
25
Mais alterações...
Como imprimir área da forma geométrica? Altero na classe Círculo? Ou na FormaGeometrica? Redefinir método imprime( ) incluindo
área.
26
Alterando a superclasse
27
Exercício – Subclasse Retangulo
Atributos básicos– Base– Altura
Métodos– Sets/ Gets– Construtor (base, altura)– area()– imprime()
28
Classe Retangulo
29
Classe Retangulo (cont.)
30
Teste Formas
31
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– 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
32
Interface Java
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
33
Implementação de interface
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
34
Exercício para entregar
Classe triângulo Classe de teste com as 3 formas