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