Escolar Documentos
Profissional Documentos
Cultura Documentos
4 - Java - Herança
4 - Java - Herança
4 - Java - Herança
Herança
2
Herança na UML
A herança pode ser representada na UML assim:
4
Generalização e Especificação
Nesse exemplo é correto afirmar que:
PessoaFisica é filha/subclasse/derivada de
Pessoa
PessoaJuridica é filha/subclasse/derivada de
Pessoa
5
Herança em java
A herança pode ser indicada pela palavra reservada extends e
deve ser coloca após o nome da classe
Classe Pessoa:
1. public class Pessoa {
2.
3. private String nome;
4. private String numeroDocumento;
5.
6. }
Importante!
Todas as classes são filhas de java.lang.Object
8
Herança em Java
Ao instanciar uma classe é possível criar um objeto do tipo mais genérico
sendo um de um tipo mais específico, porém o contrário não é possível.
Já assim, é possível:
9
Exercício - Herança
• Criar as 3 classes mostradas no diagrama com seus getters e setters
– Criar as classes no pacote br.com.curso.modelo
– Utilizar a palavra chave extends para definir a herança
10
Herança - Verificando o tipo de instância de uma classe
Sintaxe:
//retorna true ou false
objeto instanceof Classe
11
Herança - Verificando o tipo de instância de uma classe
12
Herança - instanceof
O instanceof retorna true mesmo ao ser
comparado com a classe pai
1. Pessoa pessoaFisica = new PessoaFisica();
2. //true
3. if(pessoaFisica instanceof PessoaFisica){
4. System.out.println("É Pessoa Fisica");
5. }
6. //true
7. if(pessoaFisica instanceof Pessoa){
8. System.out.println("É Pessoa");
9. }
13
Exercício - instanceof
• Criar o pacote br.com.curso.heranca
• Criar a classe ExercicioInstanceOf no pacote br.com.curso.heranca
• Executar a classe e verificar o resultado
1. package br.com.curso.heranca;
2.
3. //imports
4.
5. public class ExercicioInstanceOf {
6.
7. public static void main(String[] args) {
8.
9. Pessoa pessoa = new PessoaFisica();
10.
11. System.out.println(pessoa instanceof Object);
12. System.out.println(pessoa instanceof Pessoa);
13. System.out.println(pessoa instanceof PessoaFisica);
14. System.out.println(pessoa instanceof PessoaJuridica);
15.
16. }
17. }
14
Sobrescrita de método
• Também conhecido como reescrita de
método
• Acontece quando a classe pai possui algum
método e este método é reescrito na classe
com o mesmo nome
15
Sobrescrita de Método
• A classe Pessoa, possui o método getDocumento() e as suas classes filhas
reescrevem esse método.
16
Sobrescrita de Método
Para reescrever o método a classe filha deve declarar a classe com o mesmo
tipo de retorno e com o mesmo nome:
1. public class PessoaFisica extends Pessoa{
2.
3. public String getDocumento(){
4. return "CPF";
5. }
6.
7. }
17
Sobrescrita de Método
Classe Pessoa com o método getDocumento():
1. public class Pessoa {
2. public String getDocumento(){
3. return "Nenhum";
4. }
5. }
18
Exercício - Sobrescrita de Método
• Criar o método getDocumento() na classe Pessoa, com o retornando a String
“Nenhum”
• Sobrescrever esse método nas classes PessoaFisica e PessoaJuridica retornando
“CPF” e “CNPJ”, respectivamente.
• Criar e exeutar a classe ExercicioSobrescrita no pacote br.com.curso.heranca com
o seguinte método main
1. package br.com.curso.heranca;
2.
3. //imports
4.
5. public class ExercicioSobrescrita {
6. public static void main(String[] args) {
7.
8. Pessoa pessoa1 = new PessoaFisica();
9. Pessoa pessoa2 = new PessoaJuridica();
10.
11. System.out.println(pessoa1.getDocumento());
12. System.out.println(pessoa2.getDocumento());
13.
14. }
15. }
19
Palavra chave super
• Para se acessar métodos e atributos da classe
pai, pode-se utilizar a palavra chave super
• Quando queremos acessar da própria classe
pode-se utilizar a palavra chave this
20
Palavra chave super
No exemplo abaixo a classe Usuario, filha de PessoaFisica,
sobrescreve o método getDocumento() e utiliza a palavra
chave super:
22
Utilizando o super no Construtor
Exemplo utilizando as classes Pessoa e PessoaFisica:
1. public class Pessoa {
2.
3. private String nome;
4.
5. public Pessoa(String nome) {
6. this.nome = nome;
7. }
8. }
23
Utilizando o super no Construtor
O super ao ser chamado no construtor deve ser o primeiro comando a
ser chamado, caso contrário a classe apresenta erro de compilação
24
Exercício de Fixação - Herança
Considerando a classe Funcionario e Gerente:
1. public class Funcionario{
2. }
25
Exercício de Fixação - Herança
Considerando a classe Funcionario e Gerente:
1. public class Funcionario{
2. }
26
Exercício de Fixação - Herança
Considerando os códigos abaixo:
1. public class Funcionario{
2. }
29