Buscar

3 Herança, Reescrita e Polimorfismo

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:

Mais conteúdos dessa disciplina