Prévia do material em texto
HERANÇA, REESCRITA E POLIMORFISMO HERANÇA Orientação a Objetos define o conceito de herança, permitindo que subclasses sejam criadas a partir de uma classe original e genérica, conhecida como superclasse. Vamos ao exemplo de um sistema de Banco. Temos a classe Funcionario: Em um banco, além de um funcionário comum, há também outros cargos, como gerentes por exemplo. Além do gerente ter as mesmas informações de um funcionário, o gerente tem outras informações, como por exemplo: uma senha para acessar o sistema interno do banco. Classe Gerente: Observe que na classe Gerente repetimos código da classe Funcionario. Para melhorar isso, usamos o conceito de herança, onde uma classe herda tudo que a outra classe tem. Para isso usamos a palavra-chave EXTENDS. Exemplo - Classe Gerente alterada: Toda vez que criarmos um objeto do tipo Gerente, este objeto possuirá também os atributos definidos na classe Funcionario , pois um Gerente é um Funcionario. Testando a classe Gerente: SUPERCLASSE E SUBCLASSE · Funcionario é a SUPERCLASSE / Classe Mãe de Gerente · Gerente é a SUBCLASSE / Classe Filha de Funcionario Gerente herda de Funcionario Uma classe pode ter várias filhas, mas pode ter apenas uma mãe, isso é chamado de herança simples em Java. Java não aceita herança múltipla, que é quando classe filha pode herdar de mais de uma classe mãe. Observações importantes: · Se, por acaso, precisarmos mudar o comportamento da classe Funcionario, as demais classes refletirão essa mudança sem a necessidade de serem todas reimplementadas. · Observe também que quanto mais abaixo na hierarquia, mais especializado se torna uma classe. A idéia é que as classes superiores sejam bastante genéricas, permitindo a representação mais abrangente dessa classe. Exemplo: · A palavra reservada extends: Em Java usamos a palavra reservada extends para definir uma subclasse. Essa palavra traduz a idéia de que uma classe está estendendo as características e a funcionalidade de sua superclasse. · Um detalhe importante é que na linguagem Java não existe herança múltipla. Linguagens como C++ implementam herança múltipla. · Outro aspecto importante é o fato de que os construtores NÃO são herdados pelas subclasses. Uma classe estendida herda todos os membros dessa superclasse menos os seus construtores. A SUPERCLASSE OBJECT Em Java, toda a classe é implicitamente estendida da classe Object, definida na API da linguagem como: public class Object; A superclasse Funcionario poderia ter sido declarada assim: public class Funcionario extends Object; É o mesmo que public class Funcionario PROTECTED - OBSERVAÇÃO Se eu tentar acessar algum atributo da classe Funcionario ou Gerente, vai dá erro, pois os atributos estão como privados nas classes. Se eu quiser que as classes filhas tenham acesso aos atributos da classe mãe, devo usar o modificador PROTECTED. Exemplo: CLASSE FUNCIONARIO ALTERADA: CLASSE TESTA GERENTE ALTERADA: Tabela resumo dos modificadores de acesso: REESCRITA DE MÉTODO Todo fim de ano, os funcionários recebem uma bonificação, os funcionários comuns recebem 10% do valor do salário e os gerentes, 15%. A classe funcionário vai ter o método getBonificacao: Se usarmos esse método na classe gerente, o gerente vai receber 10% de bonificação, o que não é o correto. No Java, quando herdamos um método, podemos alterar seu comportamento. Podemos reescrever (reescrever, sobrescrever, override) este método: OBSERVAÇÕES: · Lembre-se de colocar o atributo salário da classe Funcionario como protected, se não, vai ocorrer erro ao tentar reescrever o método. · A anotação @OVERRIDE serve para deixar explícito que método é a reescrita de um método da sua classe mãe. Essa anotação não é obrigatória. Mas caso um método esteja anotado com @Override, ele necessariamente precisa estar reescrevendo um método da classe mãe. Agora, vamos testar a classe gerente: POLIMORFISMO Polimorfismo = várias formas. Polimorfismo simplesmente significa reescrever um método da classe mãe na classe filha, e assim determinar novos comportamentos desse método. Exemplo: A classe Animal é a classe mãe / superclasse. Na classe Animal existe o método locomover(): public class Animal{ private String cor; private String nome; public void getLocomover(){ System.out.println("Cada animal se locomove de forma diferente!"); } } Cada animal é diferente, Mamífero e Ave se locomovem de forma diferente, por exemplo. No exemplo a seguir, tenho a classe Mamífero. Na classe Mamífero, não existe o método locomover: public class Mamifero extends Animal{ private String classe; } Agora vou criar uma classe para testar: public class TestaAnimais{ public static void main(String[] args){ Mamifero mamifero = new Mamifero(); mamifero.getLocomover(); System.out.println(); //A saída será: Cada animal se locomove de forma diferente! } } Mas se quisermos especificar o comportamento do mamífero, é só modificar o método locomover: public class Mamifero extends Animal{ private String classe; public void getLocomover(){ System.out.println("Mamiferos correm!"); } } Agora testando novamente: public class TestaAnimais{ public static void main(String[] args){ Mamifero mamifero = new Mamifero(); mamifero.getLocomover(); System.out.println(); //A saída será: Mamíferos correm! } } Então temos aí o polimorfismo, pois o mesmo método (locomover) foi implementado de forma diferente na classe Animal e Mamifero; Observação: Perceba que é o mesmo método, porém, na implementação dele nas duas classes, ele foi sobreposto. Esta forma de polimorfismo é a mais comum. Porém, para que ela aconteça, é necessário que ambos os métodos possuam assinaturas iguais, neste caso, possuírem o mesmo nome, não terem parâmetros e não retornarem nenhum valor. image6.png image7.png image8.png image9.png image10.png image11.png image12.png image13.png image14.png image1.png image2.png image3.png image4.png image5.png HERANÇA, REESCRITA E POLIMORFISMO HERANÇA Orientação a Objetos define o conceito de herança, permitindo que subclasses sejam criadas a partir de uma classe original e genérica, conhecida como superclasse. Vamos ao exemplo de um sistema de Banco. T e mos a classe Funcionario: Em um banco, a lém de um funcionário comum, h á também outros cargos, como gerentes por exemplo . Além do gerente ter as mesmas informações d e um funcionário, o gerente tem outras informações, como por exemplo: uma senha para acessar o s istema interno do banco. Classe Gerente: HERANÇA, REESCRITA E POLIMORFISMO HERANÇA Orientação a Objetos define o conceito de herança, permitindo que subclasses sejam criadas a partir de uma classe original e genérica, conhecida como superclasse. Vamos ao exemplo de um sistema de Banco. Temos a classe Funcionario: Em um banco, além de um funcionário comum, há também outros cargos, como gerentes por exemplo. Além do gerente ter as mesmas informações de um funcionário, o gerente tem outras informações, como por exemplo: uma senha para acessar o sistema interno do banco. Classe Gerente: