SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
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á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;
Exemplo
public class Animal {
  public Animal() { super(); }
}

public class Leao extends Animal {

    public Leao() {
        super();
    }

}
Se a superclasse não tiver um
construtor 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;
Exemplo de superclasse sem construtor
padrão
public class Canideo extends Animal {

    private String raca;

    public Canideo( String raca ) {
         this.raca = raca;
    }

    public String getRaca() {
         return raca;
    }

}
Exemplo da subclasse
public class Cachorro extends Canideo {

    public Cachorro() {
        //não compila
    }

    public Cachorro(String raca) {
        super(raca);
    }

}
A anatomia de um objeto que herda de
outros objetos




                                 Ordem de execução dos construtores
          Cachorro


          Canídeo


           Animal




           Object
Quando eu invoco o construtor de
Cachorro…
                      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
Chamando um construtor da mesma
classe
}    É 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;
Exemplo de chamada a construtor da
mesma classe
public class Cachorro extends Canideos {

    public Cachorro() {
        this( "Pastor Alemão" );
    }

    public Cachorro(String raca) {
        super(raca);
    }

}
Complicando o nosso problema de
heranç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;
Criando a classe bixo de estimação
public 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”);
    }

}
Agora, aonde colocar ela?


BichoDeEstimação
                          Animal


          Felino                   Canídeo


   Gato            Leão       Cachorro   Lobo
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 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;
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;
A nossa primeira interface
public interface BichoDeEstimacao extends Cloneable {

    public abstract void setDono( String dono );

    public abstract String getDono( );

    public abstract void comer();

    public abstract void brincar();

}
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;
Implementando uma interface
public 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);
    }

}
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;
Usando interfaces
public class CachorroTest {

    public static void main(String[] args) {
        BichoDeEstimacao bicho = new Cachorro();

        bicho.setDono("José");
        bicho.brincar();

    }

}
Onde mais eu posso ver interfaces?
}    Coleções
      }    Collection
            }    List
                  ¨  ArrayList
                  ¨  LinkedList

            }    Set
                  ¨  HashSet
                  ¨  LinkedHashSet

            }    Map
                  ¨  HashMap,
                  ¨  LinkedHashMap
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;
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 );
}
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;
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;

Más contenido relacionado

La actualidad más candente

Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Java Desktop
Java DesktopJava Desktop
Java Desktopciceroclc
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Luciano Ramalho
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etcLuciano Ramalho
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Tchelinux
 
Threads 04 Variáveis atômicas
Threads 04 Variáveis atômicasThreads 04 Variáveis atômicas
Threads 04 Variáveis atômicasHelder da Rocha
 
Java Básico :: Classe Vector
Java Básico :: Classe VectorJava Básico :: Classe Vector
Java Básico :: Classe VectorWesley R. Bezerra
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentesHelder da Rocha
 
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Paulo Henrique Lerbach Rodrigues
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordidaLuciano Ramalho
 

La actualidad más candente (18)

Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
 
Threads 04 Variáveis atômicas
Threads 04 Variáveis atômicasThreads 04 Variáveis atômicas
Threads 04 Variáveis atômicas
 
Aula05
Aula05Aula05
Aula05
 
Java Básico :: Classe Vector
Java Básico :: Classe VectorJava Básico :: Classe Vector
Java Básico :: Classe Vector
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentes
 
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 

Similar a Curso java 06 - mais construtores, interfaces e polimorfismo

Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
Polimorfismo em java
Polimorfismo em javaPolimorfismo em java
Polimorfismo em javaManoel Afonso
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doublePAULO Moreira
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaFabrício Rissetto
 
Linguagem de programação implementação de classes
Linguagem de programação   implementação de classesLinguagem de programação   implementação de classes
Linguagem de programação implementação de classesCarlos Melo
 
Poo1 aula 6 - conversão de tipos primitivos
Poo1   aula 6 - conversão de tipos primitivosPoo1   aula 6 - conversão de tipos primitivos
Poo1 aula 6 - conversão de tipos primitivosDenis Sobrenome
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Rogério Moraes de Carvalho
 
Padrão de projeto de software Composite
Padrão de projeto de software CompositePadrão de projeto de software Composite
Padrão de projeto de software CompositeTiago R. Sampaio
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 

Similar a Curso java 06 - mais construtores, interfaces e polimorfismo (20)

Git, GitHub e OO
Git, GitHub e OOGit, GitHub e OO
Git, GitHub e OO
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
Java 06
Java 06Java 06
Java 06
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
 
Grupo2
Grupo2Grupo2
Grupo2
 
Polimorfismo em java
Polimorfismo em javaPolimorfismo em java
Polimorfismo em java
 
Threads
ThreadsThreads
Threads
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-double
 
v
vv
v
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem moderna
 
Orientação a Objeto
Orientação a ObjetoOrientação a Objeto
Orientação a Objeto
 
Linguagem de programação implementação de classes
Linguagem de programação   implementação de classesLinguagem de programação   implementação de classes
Linguagem de programação implementação de classes
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Poo1 aula 6 - conversão de tipos primitivos
Poo1   aula 6 - conversão de tipos primitivosPoo1   aula 6 - conversão de tipos primitivos
Poo1 aula 6 - conversão de tipos primitivos
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
 
Padrão de projeto de software Composite
Padrão de projeto de software CompositePadrão de projeto de software Composite
Padrão de projeto de software Composite
 
Aula4
Aula4Aula4
Aula4
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 

Más de Maurício Linhares

Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropMaurício Linhares
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMaurício Linhares
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleçõesMaurício Linhares
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemMaurício Linhares
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Maurício Linhares
 
Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Maurício Linhares
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Maurício Linhares
 
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
Projeto e desenvolvimento de sistemas de informação   4 - computação em redeProjeto e desenvolvimento de sistemas de informação   4 - computação em rede
Projeto e desenvolvimento de sistemas de informação 4 - computação em redeMaurício Linhares
 

Más de Maurício Linhares (20)

Mercado de TI
Mercado de TIMercado de TI
Mercado de TI
 
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleções
 
Curso java 02 - variáveis
Curso java   02 - variáveisCurso java   02 - variáveis
Curso java 02 - variáveis
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
Feature Driven Development
Feature Driven DevelopmentFeature Driven Development
Feature Driven Development
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvem
 
Mercado hoje
Mercado hojeMercado hoje
Mercado hoje
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
Revisão html e java script
Revisão html e java scriptRevisão html e java script
Revisão html e java script
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010
 
Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010
 
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
Projeto e desenvolvimento de sistemas de informação   4 - computação em redeProjeto e desenvolvimento de sistemas de informação   4 - computação em rede
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
 
Extreme programming explicada
Extreme programming explicadaExtreme programming explicada
Extreme programming explicada
 
Jdbc e hibernate
Jdbc e hibernateJdbc e hibernate
Jdbc e hibernate
 
Java wsdp
Java wsdpJava wsdp
Java wsdp
 

Curso java 06 - mais construtores, interfaces e polimorfismo

  • 1. Construtores e interfaces Maurício Linhares
  • 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. Exemplo public class Animal { public Animal() { super(); } } public class Leao extends Animal { public Leao() { super(); } }
  • 4. Se a superclasse não tiver um construtor 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. Exemplo de superclasse sem construtor padrão public class Canideo extends Animal { private String raca; public Canideo( String raca ) { this.raca = raca; } public String getRaca() { return raca; } }
  • 6. Exemplo da subclasse public class Cachorro extends Canideo { public Cachorro() { //não compila } public Cachorro(String raca) { super(raca); } }
  • 7. A anatomia de um objeto que herda de outros objetos Ordem de execução dos construtores Cachorro Canídeo Animal Object
  • 8. Quando eu invoco o construtor de Cachorro… 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. Chamando um construtor da mesma classe }  É 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. Exemplo de chamada a construtor da mesma classe public class Cachorro extends Canideos { public Cachorro() { this( "Pastor Alemão" ); } public Cachorro(String raca) { super(raca); } }
  • 11. Complicando o nosso problema de heranç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. Criando a classe bixo de estimação public 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. Agora, aonde colocar ela? BichoDeEstimação Animal Felino Canídeo Gato Leão Cachorro Lobo
  • 14. O Diamante da Morte Object comer() comer() Bicho Animal Gato
  • 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. 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. A nossa primeira interface public interface BichoDeEstimacao extends Cloneable { public abstract void setDono( String dono ); public abstract String getDono( ); public abstract void comer(); public abstract void brincar(); }
  • 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. Implementando uma interface public 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. 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. Usando interfaces public class CachorroTest { public static void main(String[] args) { BichoDeEstimacao bicho = new Cachorro(); bicho.setDono("José"); bicho.brincar(); } }
  • 22. Onde mais eu posso ver interfaces? }  Coleções }  Collection }  List ¨  ArrayList ¨  LinkedList }  Set ¨  HashSet ¨  LinkedHashSet }  Map ¨  HashMap, ¨  LinkedHashMap
  • 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. 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. 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. 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;