Herança e polimorfismo Giuliana Silva Bezerra Herança Mecanismo de orientação a objetos que permite que uma classe seja derivada de outra, herdando seus atributos e métodos. Objetivo: – Permitir o reuso de código de classes existentes, sem a necessidade de reescrever ou copiar tal código. Herança Quando a classe B herda da classe A, dizemos que: – B é subclasse de A – A é a superclasse de B Uso da construção “extends” para fazer uma classe herdar de outra Herdando atributos e métodos Uma subclasse herda todos os atributos e métodos da sua superclasse que sejam públicos Uso de protected Construtores não são herdados, embora o construtor de uma superclasse possa ser chamado pelo construtor da subclasse Os atributos e métodos herdados podem ser usados livremente dentro da classe, como se fossem dela Classe pessoa Classe Aluno herdando de Pessoa Sobrecarga de métodos Ocorre quando uma classe declara métodos de mesmo nome. OBS: Observe que as assinaturas dos métodos são diferentes. Polimorfismo “Um nome, vários comportamentos” Ex: abrir Porta, caixa, janela, conta bancária, etc.. OBS: Métodos da mesma classe podem ter o mesmo nome, desde que possuam quantidade ou tipo de parâmetros diferentes(assinaturas diferentes) e, métodos da classe derivada podem ter nomes iguais aos da classe base, inclusive com parâmetros iguais. Exemplo Acessar métodos de superclasses A palavra-chave “super” pode ser usada para acessar métodos sobrepostos pela subclasse No caso de construtores basta usar diretamente a palavra “super” Exemplo Classes e métodos final Classes declaradas como final não podem ter subclasses Métodos declarados como final não podem ser sobrepostos Conversão (casting) de objetos Em Java, é permitido que objetos de um dado tipo possam ser atribuídos para referências Objetos podem ser atribuídos para referências de objetos do mesmo tipo ou qualquer supertipo Caso obj não seja do tipo Aluno, uma exceção será lançada Exemplo Cat c1 = new Cat(); Animal a = c1; //automatic upcasting to Animal Cat c2 = (Cat) a; //manual downcasting back to a Cat Teste do tipo de objetos Para evitar exceções relacionadas a conversões (casting) pode se usar o operador instanceof Exemplo: Obj é um Aluno? Classes e métodos abstratos Classes abstratas não podem ser instanciadas Métodos abstratos só serão implementados pela subclasse Cabe a classe herdeira da classe abstrata implementar seus métodos abstratos Herança em Java Toda classe em Java deve herdar necessariamente de alguma outra. Caso não seja declarada explicitamente, o compilador garante que a sua classe irá herdar da classe Object Interfaces Obrigam as classes a implementarem seus métodos Uso da palavra “implements” Exercício 1 Implementar as classes “Pessoa” e “Aluno”: Exercício 2