Construtores e interfaces             Maurício Linhares
Herança e construtores}    Quando uma classe herda de outra, ela herda as ações      (os métodos) e os atributos (variáve...
Exemplopublic class Animal {  public Animal() { super(); }}public class Leao extends Animal {    public Leao() {        su...
Se a superclasse não tiver umconstrutor padrão...}    Na primeira linha do construtor da sua subclasse você vai ter      ...
Exemplo de superclasse sem construtorpadrãopublic class Canideo extends Animal {    private String raca;    public Canideo...
Exemplo da subclassepublic class Cachorro extends Canideo {    public Cachorro() {        //não compila    }    public Cac...
A anatomia de um objeto que herda deoutros objetos                                 Ordem de execução dos construtores     ...
Quando eu invoco o construtor deCachorro…                      Construtor                      de object é                ...
Chamando um construtor da mesmaclasse}    É possível invocar, de dentro de um construtor, outro      construtor da mesma ...
Exemplo de chamada a construtor damesma classepublic class Cachorro extends Canideos {    public Cachorro() {        this(...
Complicando o nosso problema deherança}    Nossos animais viviam em um zoológico, mas agora o      nosso sistema também p...
Criando a classe bixo de estimaçãopublic class BichoDeEstimacao {   private String dono;    public void setDono(String don...
Agora, aonde colocar ela?BichoDeEstimação                          Animal          Felino                   Canídeo   Gato...
O Diamante da Morte               Object     comer()               comer()       Bicho            Animal               Gato
Herança múltipla}    O famoso diamante da morte é um dos resultados de se      usar herança múltipla em projetos;}    Em...
E as interfaçes vem para salvar o dia!}    Interfaces são “contratos” definidos em Java que dizem      como um objeto dev...
A nossa primeira interfacepublic interface BichoDeEstimacao extends Cloneable {    public abstract void setDono( String do...
Em uma interface…}    Todos os métodos são abstratos;}    Todos os métodos são públicos;}    Não existem construtores;}...
Implementando uma interfacepublic class Cachorro extends Canideo implements BichoDeEstimacao {    private String dono;    ...
Implementando interfaces}    Diferentemente de classes abstratas, onde você também      pode herdar implementação, em uma...
Usando interfacespublic class CachorroTest {    public static void main(String[] args) {        BichoDeEstimacao bicho = n...
Onde mais eu posso ver interfaces?}    Coleções      }    Collection            }    List                  ¨  ArrayLis...
Quando usar interfaces}    Quando o problema levar você para o diamante da      morte :P}    Quando você quiser que clas...
Exercício}    Crie duas implementações para a interface abaixo:public interface BancoDeDados {        public void adicion...
Exercício - detalhes}    Uma das implementações deve manter os dados em uma      coleção dentro do objeto (uma LinkedList...
Exercício – mais detalhes}    Quem entregar o exercício usando um arquivo estilo CSV      ou XML ganha uma ajudinha na no...
Próximos SlideShares
Carregando em…5
×

Curso java 06 - mais construtores, interfaces e polimorfismo

3.235 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
3.235
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
88
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Curso java 06 - mais construtores, interfaces e polimorfismo

  1. 1. Construtores e interfaces Maurício Linhares
  2. 2. Herança e construtores}  Quando uma classe herda de outra, ela herda as ações (os métodos) e os atributos (variáveis de instância), mas os construtores não são herdados;}  Em qualquer construtor, a primeira linha é, obrigatoriamente, uma chamada a um construtor da superclasse, quando a nossa superclasse tem um construtor padrão, o compilador adiciona essa linha automaticamente;
  3. 3. Exemplopublic class Animal { public Animal() { super(); }}public class Leao extends Animal { public Leao() { super(); }}
  4. 4. Se a superclasse não tiver umconstrutor padrão...}  Na primeira linha do construtor da sua subclasse você vai ter que chamar um dos construtores da supeclasse diretamente;}  Você pode escolher entre qualquer um dos construtores que houverem na superclasse;}  A chamada a o construtor da superclasse é feita através de uma chamada a “super()” passando os parâmetros dentro dos parênteses;}  Não pode haver nenhuma linha de código anterior a chamada do construtor da superclasse;
  5. 5. Exemplo de superclasse sem construtorpadrãopublic class Canideo extends Animal { private String raca; public Canideo( String raca ) { this.raca = raca; } public String getRaca() { return raca; }}
  6. 6. Exemplo da subclassepublic class Cachorro extends Canideo { public Cachorro() { //não compila } public Cachorro(String raca) { super(raca); }}
  7. 7. A anatomia de um objeto que herda deoutros objetos Ordem de execução dos construtores Cachorro Canídeo Animal Object
  8. 8. Quando eu invoco o construtor deCachorro… Construtor de object é executado Construtor Animal invoca de animal é super() executado Canídeo Construtor invoca de Canídeo é super() executado Cachorro Construtor invoca de cachorro super() é executado
  9. 9. Chamando um construtor da mesmaclasse}  É possível invocar, de dentro de um construtor, outro construtor da mesma classe;}  Você faz isso através de uma chamada a “this()” passando pelos parênteses os parâmetros para o construtor que vocêr quer invocar;}  Essa chamada a “this()” deve ser feita na primeira linha do seu construtor;
  10. 10. Exemplo de chamada a construtor damesma classepublic class Cachorro extends Canideos { public Cachorro() { this( "Pastor Alemão" ); } public Cachorro(String raca) { super(raca); }}
  11. 11. Complicando o nosso problema deherança}  Nossos animais viviam em um zoológico, mas agora o nosso sistema também precisa ser capaz de lidar com animais de estimação;}  Nem todos os animais vão ser animais de estimação (até porque você náo teria espaço para criar um hipopótamo em casa);}  Exemplos de animais que seriam bichos de estimação são Gatos e Cachorros;
  12. 12. Criando a classe bixo de estimaçãopublic class BichoDeEstimacao { private String dono; public void setDono(String dono) { this.dono = dono; } public String getDono() { return dono;} public void brincar() { System.out.println("Brincando com " + this.dono); } public void comer() { System.out.println(“Comendo ração”); }}
  13. 13. Agora, aonde colocar ela?BichoDeEstimação Animal Felino Canídeo Gato Leão Cachorro Lobo
  14. 14. O Diamante da Morte Object comer() comer() Bicho Animal Gato
  15. 15. Herança múltipla}  O famoso diamante da morte é um dos resultados de se usar herança múltipla em projetos;}  Em Java, felizmente, é impossível usar herança múltipla, então não precisamos nos preocupar com esse problema;}  Mas o fato de não haver herança múltipla também não resolve nosso problema, que é fazer gatos e cachorros poderem ser tratados como bichos de estimação;
  16. 16. E as interfaçes vem para salvar o dia!}  Interfaces são “contratos” definidos em Java que dizem como um objeto deve se comportar;}  Em uma interface você define métodos que um objeto que implemente o contrato da interface deve ter implementados;}  Uma interface funciona como uma classe abstrata que não tem nenhuma implementação;
  17. 17. A nossa primeira interfacepublic interface BichoDeEstimacao extends Cloneable { public abstract void setDono( String dono ); public abstract String getDono( ); public abstract void comer(); public abstract void brincar();}
  18. 18. Em uma interface…}  Todos os métodos são abstratos;}  Todos os métodos são públicos;}  Não existem construtores;}  Não existem variáveis de instância, apenas constantes;
  19. 19. Implementando uma interfacepublic class Cachorro extends Canideo implements BichoDeEstimacao { private String dono; public String getDono() { return this.dono; } public void setDono(String dono) { this.dono = dono; } public void brincar() { System.out.println("Brincando com " + this.dono); }}
  20. 20. Implementando interfaces}  Diferentemente de classes abstratas, onde você também pode herdar implementação, em uma interface você herda apenas o contrato, as assinaturas dos métodos;}  Em vez de usar “extends”, em interfaces nós usamos “implements”, então no caso de interfaces nós estamos mesmo herdando comportamentos;}  Um mesmo objeto pode implementar várias interfaces, ele não precisa implementar apenas uma;
  21. 21. Usando interfacespublic class CachorroTest { public static void main(String[] args) { BichoDeEstimacao bicho = new Cachorro(); bicho.setDono("José"); bicho.brincar(); }}
  22. 22. Onde mais eu posso ver interfaces?}  Coleções }  Collection }  List ¨  ArrayList ¨  LinkedList }  Set ¨  HashSet ¨  LinkedHashSet }  Map ¨  HashMap, ¨  LinkedHashMap
  23. 23. Quando usar interfaces}  Quando o problema levar você para o diamante da morte :P}  Quando você quiser que classes diferentes respondam a um mesmo contrato, independente da implementação delas ( “Se fala, anda, nada e voa como um pato, é um pato!” ) ;}  Quando você quer evitar “amarrar” a supeclasse de um conjunto de classes desnecessariamente;
  24. 24. Exercício}  Crie duas implementações para a interface abaixo:public interface BancoDeDados { public void adicionar( Pessoa pessoa ); public void remover( Pessoa pessoa ); public List<Pessoa> listar(); public Pessoa encontrarPessoaPeloNome( String nome ); public Pessoa encontrarPessoaPeloCPF( String cpf );}
  25. 25. Exercício - detalhes}  Uma das implementações deve manter os dados em uma coleção dentro do objeto (uma LinkedList ou ArrayList);}  A outra implementação deve escrever o resultado das operações em um arquivo. Esse arquivo pode ter o formato que você quiser, mas todas as operações devem ser refletidas nesse arquivo;}  Pra escrever em arquivo você tanto pode criar o seu próprio formato, como pode usar ObjectInputStream, ObjectOutputStream e Serializable;
  26. 26. Exercício – mais detalhes}  Quem entregar o exercício usando um arquivo estilo CSV ou XML ganha uma ajudinha na nota;}  Pra lidar com arquivos em Java, as classes são File, InputStream, OutputStream, Reader e Writer;

×