2. HERANÇA
• É uma forma de reutilização de software na qual
uma nova classe é criada, absorvendo membros de
uma classe existente e aprimorada com
capacidades novas ou modificadas.
• Permite enconomia de tempo no desenvolvimento
de programas, reutilizando software de alta
qualidade, testado e depurado
3. HERANÇA
• SUPERCLASSE:
• Quando uma nova classe herda MEMBROS de
uma classe existente
• SUBCLASSE:
• Nova classe criada com herança de MEMBROS
• Uma subclasse pode se tornar uma superclasse
para outras subclasses
4. HERANÇA
• SUBCLASSE:
• Tem seus próprios métodos e classes
• É mais específica que a superclasse
• Representa um grupo mais ESPECIALIZADO de
objetos
• Possui comportamentos da SUPERCLASSE mais
os adicionais específicos a ela
5. HERANÇA
• SUPERCLASSE DIRETA:
• É a superclasse a partir da qual a subclasse herda
explicitamente
• SUPERCLASSE INDIRETA:
• Qualquer superclasse acima da classe direta na
HIERARQUIA DE CLASSE
• HIERARQUIA DE CLASSE:
• Define os relacionamentos de herança entre as
classes
6. HERANÇA
• HIERARQUIA DE CLASSE:
• Inicia com a classe OBJECT (pacote java.lang)
• TODA classe JAVA ESTENDE (“herda de”) direta
ou indiretamente a classe OBJECT!
• HIERARQUIA SIMPLES:
• Uma classe é derivada de uma superclasse direta
• JAVA NÃO SUPORTA HERANÇA MULTIPLA
7. HERANÇA
• HERANÇA MULTIPLA:
• Ocorre quando uma classe é derivada de mais de
uma superclasse direta
• RELACIONAMENTO É UM:
• Representa a herança
• Um objeto de uma subclasse também pode ser
tratrado como um objeto da sua superclasse
• Exemplo: um carro É UM veículo
8. HERANÇA
• RELACIONAMENTO TEM UM:
• Representa a composição
• Um objeto contém uma ou mais referências de
objeto como membros
• Exemplo:
• um carro TEM UMA direção
• um objeto carro TEM UMA referência a um
objeto direção
9. SUPERCLASSES E SUBCLASSES
• Um objeto de uma classe frequentemente também
É UM objeto de outra classe
• EXEMPLO:
• Um retangulo É UM quadrilátero
• Um quadrado É UM quadrilátero
• Um paralelogramo É UM quadrilátero
• Um trapezóide É UM quadrilátero
10. SUPERCLASSES E SUBCLASSES
• Um retangulo HERDA DE um quadrilátero
• Quadrilatero é uma SUPERCLASSE
• Retangulo é uma SUBCLASSE
• Um retangulo é um tipo específico de quadrilatero
• MAS um quadrilatero NÃO É UM retangulo
• Um quadrilatero PODER SER:
• Um paralelogramo
• Um quadrado
• Etc
11. SUPERCLASSES E SUBCLASSES
• Superclasses são mais gerais
• Subclasses são mais específicas
• Cada objeto de SUBCLASSE é um objeto de sua
SUPERCLASSE
• Uma SUPERCLASSE pode ter várias SUBLCLASSES
• Exemplo:
• Uma superclasse VEÍCULO representa todos os
veículos
• Uma subclasse CARRO representa um
subconjunto de veículo menor e mais específico
12. SUPERCLASSES E SUBCLASSES
• Relacionamentos de herança formam estruturas
hierarquicas do tipo ARVORE
• Há situações em que uma classe pode ser ao
mesmo tempo uma subclasse e também uma
superclasse
• HIERARQUIA DE CLASSE = HIERARQUIA DE
HERANÇA
15. SUPERCLASSES E SUBCLASSES
• EXEMPLO:
• A leitura do diagrama é feita da seguinte forma: de
baixo para cima, seguindo as setas:
• Um Administrador é um membro do Corpo
Docente
• Um Professor é um membro do Corpo Docente
• Um Corpo Docente é um membro de Empregado
16. SUPERCLASSES E SUBCLASSES
• EXEMPLO:
• Um Funcionário é membro de Empregado
• Um Empregado é membro da comunidade
• Um Aluno é membro da comunidade
• Um Graduado é membro da comunidade
• Membro da Comunidade é a superclasse direta de
Empregado, Aluno e Graduados
17. SUPERCLASSES E SUBCLASSES
• EXEMPLO:
• Membro da Comunidade é a superclasse indireta
de todas as outras subclasses no diagrama
• Um administrador é um membro do corpo docente
que é um membro de empregado que é um
membro da comunidade
19. SUPERCLASSES E SUBCLASSES
• Nem todo relacionamento de classe é um
relacionamento de herança
• Relacionamento TEM UM:
• As classes têm membros que são referencias a
objetos de outras classes
• Criam classes compondo classes existentes
20. SUPERCLASSES E SUBCLASSES
• EXEMPLO:
• Classe empregado
• Classe dataDeNascimento
• Classe numeroDeTelefone
• Um empregado é uma dataDeNascimento?????
• Um empregado TEM UMA dataDeNascimento!
• Um empregado é um numeroDeTelefone?
• Um empregado TEM UM numeroDeTelefone!
21. SUPERCLASSES E SUBCLASSES
• Importante:
• Objetos de superclasse não podem ser tratados
como objetos de suas subclasses
• Exemplo:
• Todos os carros são veículos, mas nem todos os
veículos são carros
22. SUPERCLASSES E SUBCLASSES
• Desvantagem da herança:
• Uma subclassepode herdar métodos que ela não
necessita ou que não deveria ter
• Às vezes a subclasse precisa de uma versão
personalizada do método
• SOBRESCREVER:
• A subclasse pode redefinir o método da
superclasse com uma implementação mais
adequada para ela (@OVERRIDE)
23. MEMBROS PROTECTED
• Membros public:
• São acessíveis onde quer que o programa tenha
uma referencia a um objeto dessa classe ou uma
de suas subclasses
• Membor private:
• Só são acessíveis por dentro da própria classe
• Membros private de uma superclasse NÃO SÃO
HERDADOS pelas suas subclasses
24. MEMBROS PROTECTED
• MEMBROS PROTECTED:
• Nível intermediário de acesso
• Membros protected de uma SUPERCLASSE
podem ser acessados por:
• membros dessa SUPERCLASSE
• membros de suas SUBCLASSES
• membros de OUTRAS classes no mesmo
PACOTE
25. MEMBROS PROTECTED
• Membros public e protected da SUPERCLASSE
tornam-se membros public e protected da
subclasse
• PALAVRA CHAVE SUPER:
• Quando um método da SUBCLASSE sobrescrever
um método da SUPERCLASSE, o método da
SUPERCLASSE pode ser acessado a partir da
SUBCLASSE usando a palavra chave SUPER antes
o nome de método da SUPERCLASSE e um
separador de ponto
26. RELACIONAMENTOS
• PALAVRA CHAVE EXTENDS:
• Usada para indicar que a classe herda de outra
classe:
• public class ClasseExemplo extends Object
• public class Classe2 extends Classe1
• A classe exemplo herda da classe objeto
• A classe2 herda da classe 1
27. CLASSE OBJECT
• Herança utilizada para criar classes de classes
existentes
• Cada classe Java herda uma classe existente – exceto a
classe OBJECT (que não contem nenhum campo)
• Cada classe Java herda direta ou indiretamente
métodos de OBJECT.
• Se uma classe Java não especificar que ela herda outra
classe, a nova classe herda OBJECT implicitamente
28. CLASSE OBJECT
• Toda e qualquer classe em Java é uma subclasse da
classe OBJECT
• É a superclasse de todas as classes
• http://docs.oracle.com/javase/7/docs/api/
29. Construtores em subclasses
• Instanciar um objeto de SUBCLASSE inicia uma
cadeia de chamadas de construtor;
• O construtor de SUBCLASSE, invoca o construtor de
sua SUPERCLASSE direta, antes de realizar suas
próprias tarefas
• Invocação implícita: chama o construtor padrão ou
construtor sem argumentos
• Invocação explícita: usa a palavra chave SUPER
30. Construtores em subclasses
• Se a SUPERCLASSE é derivada de outra classe, o
construtor da SUPERCLASSE invoca o construtor da
próxima classe no topo da hierarquia
• O último construtor chamado na cadeia é sempre
o construtor da classe OBJECT
• O corpo do construtor de SUBCLASSE original
termina a execução por último.
31. Construtores em subclasses
• O construtor de cada SUPERCLASSE manipula as
variáveis de instância de SUPERCLASSE que o
objeto de SUBCLASSE herda
• Quando um programa cria um objeto da
SUBCLASSE, o construtor da SUBCLASSE
imediatamente
chama
o
construtor
da
SUPERCLASSE
32. Construtores em subclasses
• O corpo do construtor da SUPERCLASSE executa
para inicializar as variáveis de instância da
SUPERCLASSE que fazem parte do objeto da
SUBCLASSE
•O
corpo
do
construtor
da
SUBCLASSE, então, executa para inicializar variáveis
de instância somente da SUBCLASSE
33. Patentes de código
• A herança permite que você patenteie seu código e
os venda com as licenças apropriadas ou apenas
disponibilizando para outros usuários em formato
de bytecode
• BYTECODE JAVA: é um formato de código
intermediário entre o código fonte, o texto que o
programador consegue manipular, e o código de
máquina, que o computador consegue executar.
35. Patentes de código
• A herança permite que o programador NÃO altere
o código-fonte da SUPERCLASSE, mas permite que
ele o utilize em sua classe proprietária
• Classes proprietárias: são as classes desenvolvidas
por desenvolvedores (por vocês – são classes
personalizadas)
• Herança
preserva
a
integridade
da
SUPERCLASSE, portanto a sua SUBCLASSE não afeta
o código-fonte da SUPERCLASSE
36. Patentes de código
• Um programador Java não precisa entender — e
nem tomar conhecimento — dos bytecodes Java
para ser proficiente na linguagem, da mesma
forma que um programador de qualquer
linguagem de alto nível compilada para linguagem
de máquina não precisa conhecer a linguagem de
montagem do computador hospedeiro para
escrever bons programas naquela linguagem.
37. Patentes de código
• Em seus projeto crie menos classes que fornecem
funcionalidades mais substanciais, isso evitará
problemas na utilização das classes
• Muitas classes cria problema de gerenciamento e
pode indicar mal uso de reutilização de software
38. Patentes de código
• Se SUBCLASSES tem mais funcionalidades do que
precisam de fato, a memória e os recursos
computacionais podem ser desperdiçados
• Portanto, use herança com sabedoria! Herde
apenas das SUPERCLASSES que fornecem as
funcionalidades que de fato você precisa
39. EXEMPLO 1
package br.com.exemploheranca;
public class pessoa {
String nome, idade, endereco = "R: Java ,501";
public void ImprimeNome() {
System.out.println("o nome é:");
System.out.println("Endereco: " + endereco);
}
}
40. EXEMPLO 1
package br.com.exemploheranca;
public class fornecedor extends pessoa{
String cnpj;
public void ImprimeNome() {
System.out.println("O nome do fornecedor é :
" + nome + "n Cnpj: " + cnpj);
}
}
41. EXEMPLO 1
package br.com.exemploheranca;
public class cliente extends pessoa {
String cpf;
public void ImprimeNome() {
System.out.println("Nome do cliente é : " +
nome + "n Nº CPF: " + cpf + "n Seu endereco :" +
endereco);
}
}
42. EXEMPLO 1
package br.com.exemploheranca;
public class principal {
public static void main(String[] args) {
cliente c = new cliente();
c.nome = "Luiz";
c.cpf = "073.777.796-21";
c.ImprimeNome();
fornecedor f = new fornecedor();
f.nome = "Deltatronic";
f.cnpj = "073.856.9856.52-10";
f.ImprimeNome();
}
}
44. EXERCÍCIOS
• Desenhe uma hierarquia de herança para
alunos universitários. Utilize ALUNO como
superclasse da hierarquia, então herde
ALUNO com as classes ALUNODEGRADUAÇÃO e
ALUNOGRADUADO.
Continue
a
estender
a
hierarquia o mais profundo que conseguir
(vários níveis). Depois de desenhar a
hierarquia,
discuta
os
relacionamentos
entre as classes. Em seguida, crie as
classes e crie um programa Java que
demonstre sua utilização.
45. EXERCÍCIOS
• Desenhe
uma
hierarquia
de
herança
para
QUADRILATERIO, TRAPEZIO, PARALELOGRAMO, RETANGULO e
QUADRADO. Utilize QUADRILATERO como a superclasse da
hierarquia. Faça a hierarquia o mais profundo que
conseguir (com muitos níveis). Especifique as
variáveis de instância e os métodos para cada
classe. As variáveis de instância private de
QUADRILATERO devem ser os pares x e y de coordenadas
para os quatro ontos que delimitam o QUADRILATERO.
Escreva um programa em Java que instancia os objetos
de suas classes e gera saída da área de cada objeto
– menos o QUADRILATERO.