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 Scanner
Iní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

Herança e Polimorfismo.ppt

  • 1.
    Herança e Polimorfismo P.O. O. Prof. Ângela e Grace
  • 2.
    2 Exercício – ClasseCaminhã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.
  • 4.
  • 5.
    5 Teste – ClasseCaminhao Reescrito na subclasse: isso é sobrecarga?
  • 6.
    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.
    7 Polimorfismo  “Propriedade dese apresentar sob muitas formas”  Mesmo método chamado (invocado) pode ter diferentes resultados  Depende do tipo do objeto que invocou o método
  • 8.
    8 Polimorfismo  Classe veículopossui 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.
    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.
    10 Exemplo – Frotade 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.
    11 Ligação tardia  Veremosque 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.
    12 Classe Frota (parte1 de 3) Usa classe Scanner Início da classe Frota Declaração de Variáveis Tamanho da Frota Loop para entrada de dados
  • 13.
    13 Classe Frota (parte2 de 3) Dados comuns a qualquer veiculo Dados objeto Carro
  • 14.
    14 Classe Frota (parte3 de 3) Caminhão Tipo não identificado: veículo Polimorfismo
  • 15.
    15 Classe Abstrata  Classesdemasiadamente 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.
    16 Palavra-chave abstract  Utilizadapara 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.
    17 Formas geométricas Formas geométricas área( ) área= (b x h)/2 área = b x h área = π x r2
  • 18.
    18 Classe Abstrata: FormaGeomé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.
  • 20.
    20 Classe Circulo public classCirculo 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.
    21 Classe Circulo comMétodo Area( ) Usa classe Math Implementa Area( )
  • 22.
    22 Classe TesteFormas public classTesteFormas { public static void main (String args[]) { FormaGeometrica f = new FormaGeometrica(); f.imprime(); Circulo c = new Circulo(5); c.imprime(); } } Funcionou?
  • 23.
    23 Alterações  Classes abstratasnã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.
    24 Classe Circulo -Método imprime( ) sobrescreve imprime( )
  • 25.
    25 Mais alterações...  Comoimprimir área da forma geométrica?  Altero na classe Círculo?  Ou na FormaGeometrica?  Redefinir método imprime( ) incluindo área.
  • 26.
  • 27.
    27 Exercício – SubclasseRetangulo  Atributos básicos – Base – Altura  Métodos – Sets/ Gets – Construtor (base, altura) – area() – imprime()
  • 28.
  • 29.
  • 30.
  • 31.
    31 Interfaces  São modelosde 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.
    32 Interface Java  Descreveconjunto 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.
    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.
    34 Exercício para entregar Classe triângulo  Classe de teste com as 3 formas