Herança

1,679 views

Published on

Trabalho apresentado ao profº Douglas Del Freri no dia 25 de Maio de 2010 na disciplina de Programação Orientada a Objetos - POO na Faculdade Escritor Osman Lins - FACOL.

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,679
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
53
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Herança

  1. 1. Herança Claudemir José – Graduando em Sistemas de Informação [email_address] Jefferson Felipe – Graduando em Sistemas de Informação Jefferson_ [email_address] Thaisa Souza – Graduanda em Sistemas de Informação [email_address] Profº: Douglas Del Frari [email_address] FACOL – Faculdade Escritor Osman Lins
  2. 2. Herança <ul><li>Mecanismo pelo qual elementos mais específicos (subclasses) incorporam estrutura e comportamento de elementos mais gerais (superclasses). </li></ul><ul><li>Observe o exemplo a seguir e note as deficiências que podem ser corrigidas com o uso de herança. </li></ul>
  3. 3. Herança <ul><li>public class Empregado { </li></ul><ul><li>public int registro; </li></ul><ul><li>public String nome; </li></ul><ul><li>public double valorDaHora; </li></ul><ul><li>public int horasTrabalhadas; </li></ul><ul><li>//... </li></ul><ul><li>public double calculaSalario(){ </li></ul><ul><li>return horasTrabalhadas * </li></ul><ul><li>valorDaHora; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  4. 4. Herança <ul><li>public class Gerente { </li></ul><ul><li>public int registro; </li></ul><ul><li>public String nome; </li></ul><ul><li>public double valorDaHora; </li></ul><ul><li>public int horasTrabalhadas; </li></ul><ul><li>public String departamento; </li></ul><ul><li>//... </li></ul><ul><li>public double calculaSalario() { </li></ul><ul><li>return horasTrabalhadas * </li></ul><ul><li>valorDaHora; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  5. 5. Herança <ul><li>Analisando o código acima, percebe-se que um Gerente é um Empregado, e possui apenas um atributo adicional que representa o departamento que gerencia. Existem atributos e métodos que se aplicam tanto à classe Empregado e à Gerente, mas eles estão duplicados nas duas classes. </li></ul><ul><li>Nas linguagens orientadas a objeto, mecanismos especiais permitem definir uma classe em termos de uma classe definida anteriormente. </li></ul>
  6. 6. Herança <ul><li>public class Gerente extends Empregado { </li></ul><ul><li>public String departamento; </li></ul><ul><li>} </li></ul><ul><li>Gerente continua possuindo a estrutura (atributos) e o comportamento (métodos) da classe base (Empregado). </li></ul><ul><li>Em outras palavras, a classe Gerente descende (ou herda) da classe Empregado. </li></ul><ul><li>Em Java, é permitido apenas herança simples de implementação, ou seja, uma classe pode descender apenas de uma outra classe. </li></ul>
  7. 7. Herança <ul><li>Pode haver vários níveis na hierarquia de classes. </li></ul><ul><li>Herança simples: quando uma subclasse tem apenas uma superclasse direta. </li></ul><ul><li>Herança múltipla: quando uma subclasse tem mais de uma superclasse direta. </li></ul><ul><li>Java não suporta herança múltipla de implementação. </li></ul>Pai Filha Neta
  8. 8. Exemplo de Herança Múltipla Voador Mamifero Morcego
  9. 9. Herança <ul><li>Todo objeto de subclasse é também um objeto da superclasse (mas o inverso não). </li></ul><ul><li>– Todo Gerente é um Empregado, mas nem todo Empregado é Gerente. </li></ul><ul><li>– Todo Carro é um Veículo, mas nem todo Veículo é Carro. </li></ul><ul><li>Os membros públicos ( public ), protegidos ( protected ) de uma superclasse são acessíveis em subclasses. </li></ul><ul><li>Obs: membros default (visibilidade de pacote) são acessíveis somente se ambas as classes pertencerem ao mesmo pacote. </li></ul>
  10. 10. Herança <ul><li>Para um objeto da subclasse acessar membros da superclasse, deve usar a palavra super , que é uma referência à superclasse direta de uma subclasse. </li></ul><ul><li>Os construtores da classe estendida devem delegar a construção do estado herdado, invocando, seja implícita ou explicitamente, um construtor da superclasse. </li></ul><ul><li>– Se for assumida a invocação implícita, o construtor default (ou “noarg”) da superclasse é chamado. </li></ul>
  11. 11. Herança <ul><li>public class Empregado { </li></ul><ul><li>protected int registro; </li></ul><ul><li>protected String nome; </li></ul><ul><li>//... </li></ul><ul><li>public Empregado (int r, String n) { </li></ul><ul><li>registro = r; </li></ul><ul><li>nome = n; </li></ul><ul><li>} </li></ul><ul><li>//... </li></ul><ul><li>} </li></ul>
  12. 12. Herança <ul><li>public class Gerente extends Empregado { </li></ul><ul><li>private String departamento; </li></ul><ul><li>//.. </li></ul><ul><li>public Gerente(String dept, int reg, </li></ul><ul><li>String nome) { </li></ul><ul><li>super (reg, nome); </li></ul><ul><li>departamento = dept; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  13. 13. Conclusão <ul><li>É um meio que usamos na programação orientada a objetos na qual podemos facilitarmos na implementação de atributos e métodos, quando precisamos chamar de uma classe para outra. </li></ul>

×