Fundamentos da Linguagem Java




           A Classe Object
       Classes Básicas da API do Java



           Ludimila Monjardim Casagrande
                       2012
A Classe Object

     Object é a classe raiz da hierarquia de classes
        do Java.

     Toda classe em Java, mesmo as que não
        pertencem à API, estendem Object, ainda que
        isso não tenha sido explicitamente declarado.

     Sendo assim, toda instância de uma classe
        implementada em Java é um Object e herda os
        métodos declarados nesta superclasse.


Fundamentos do Java   ©2012 Ludimila Monjardim Casagrande   2
Métodos Especiais de Object

     Existem dois métodos de Object que merecem
        atenção especial por serem muito utilizados.
     Esses métodos são:
           public String toString()
           public boolean equals(Object obj)
     A intenção por trás dos métodos equals() e
        toString() é justamente que eles sejam
        sobrescritos de modo mais específico e adequado
        para cada uma das subclasses.
Fundamentos do Java       ©2012 Ludimila Monjardim Casagrande   3
O Método toString() de Object

     A implementação do método toString() na classe
        Object é:
         public String toString( ) {
           return getClass().getName() + "@" +
                   Integer.toHexString(hashCode());
         }




Fundamentos do Java        ©2012 Ludimila Monjardim Casagrande   4
Sobrescrevendo o Método toString()
 public class Usuario extends Object {
    private String nome;
    private String login;
    private String senha;
      public Usuario(){
      }
      public Usuario(String nome, String login, String senha) {
         super();
         this.nome = nome;
         this.login = login;
         this.senha = senha;                                    Toda vez que o método
      }                                                        public String toString( ) é
     //getters e setters...                                           implementado em uma
      @Override                                                     classe, está ocorrendo a
      public String toString() {                                    sobreposição do mesmo
         return "Usuario [nome=" + nome +
                 ", login=" + login + ", senha=" + senha + "]";         método declarado na
      }                                                                  superclasse Object.
 }
Fundamentos do Java                 ©2012 Ludimila Monjardim Casagrande                        5
Sobrescrevendo o Método toString()
 public class Aluno extends Usuario {
      private int ra; //registro acadêmico do aluno
      public Aluno(){
      }
      public Aluno(String nome, String login, String senha, int ra){
         super(nome, login, senha);
         this.ra = ra;
      }
      …
      @Override
                                                             Neste caso o método
      public String toString() {                          public String toString( )
         return "Aluno [nome=" + getNome() +                     está sobrepondo a
                 ", login=" + getLogin() +                       implementação do
                 ", senha=" + getSenha() +
                                                                 mesmo método na
                 ", ra=" + ra + "]";
      }                                                      superclasse Usuario.
 }

Fundamentos do Java            ©2012 Ludimila Monjardim Casagrande                    6
Chamada de Métodos Sobrepostos
 public class Main {
      public static void main(String[] args) {
          /* A variável o do tipo Object recebe qualquer objeto,
           * pois todo objeto estende Object */
          Object o = new Aluno(“Ana”, “ana”, “123”, 30200);

          System.out.println(o.toString());
      }
 }

 Qual será o resultado?                                                 o    0x0123
 O resultado será Aluno [nome=Ana, login=ana,
                                                                    nome      Ana
 senha=123, ra=30200], isto é, o método chamado                               ana
                                                                     login
 foi o da subclasse. Embora a variável seja do tipo                 senha     123
 Object, o objeto para o qual ela aponta é do tipo                      ra   30200
 Aluno.
Fundamentos do Java           ©2012 Ludimila Monjardim Casagrande                     7
O Método equals de Object

     A implementação do método equals na classe
        Object é:
         public boolean equals(Object obj) {
           return (this == obj);
         }

     O objetivo deste método é realizar a
        comparação do objeto como um todo e não a
        comparação somente entre as referências para
        os objetos, o que é proporcionado pelo operador
        ==.

Fundamentos do Java        ©2012 Ludimila Monjardim Casagrande   8
Sobrescrevendo o Método equals
  public boolean equals(Object obj) {                                 u1    0x0123
    if (this == obj){
         return true;                                              nome      Ana
                                                                    login    ana
    }                                                              senha     123
    if (obj instanceof Usuario) {
         Usuario u = (Usuario)obj;
         if (this.nome.equals(u.nome) &&
              this.login.equals(u.login) &&
              this.senha.equals(u.senha)) {
              return true;                                             u2   0x0456
         }
    }                                                              nome      Ana
    return false;                                                   login    ana
  }                                                                senha     123
                Método equals da classe Usuario.
Fundamentos do Java          ©2012 Ludimila Monjardim Casagrande                     9
Sobrescrevendo o Método equals
  public boolean equals(Object obj) {                           a1 0x0123
    if (this == obj){
                                                           nome       Ana
         return true;                                        login    ana
    }                                                      senha      123
    if (obj instanceof Aluno){                                  ra  30200
         Aluno a = (Aluno)obj;
         if (this.ra == a.ra && this.getNome().equals(a.getNome())) {
              return true;
         }
                                                                 a2 0x0456
    }
    return false;                                           nome       Ana
  }                                                           login    ana
                 Método equals da classe Aluno.             senha      123
                                                                 ra   30200

Fundamentos do Java        ©2012 Ludimila Monjardim Casagrande                10
Implementação do Método equals

    Sugestão de passo a passo para implementar o
       método equals:
         1.    Verifique se a referência para o objeto corrente (this) é igual à
               referência do objeto passado como argumento usando o operador
               de igualdade.
         2.    Se as referências forem iguais retorne true.
         3.    Verifique se o objeto passado como argumento é instância da
               classe corrente usando o operador instanceof. Em caso negativo,
               retorne false.
         4.    Em caso positivo, compare os valores internos dos dois objetos
               usando o operador de igualdade para comparação de primitivos e
               o método equals para a comparação de objetos, incluindo Strings.
         5.    Se os valores forem iguais retorne true, caso contrário retorne
               false.

Fundamentos do Java              ©2012 Ludimila Monjardim Casagrande               11
Referências

     Capítulo 15 – Object.
        Orientação a Objetos em Java.
        K19 Treinamentos.
        http://www.k19.com.br/downloads/apostilas-java.

     Caelum: Ensino e Soluções em Java.
        FJ-11 – Java e Orientação a Objetos.
        http://www.caelum.com.br/curso/fj-11-java-
        orientacao-objetos/


Fundamentos do Java   ©2012 Ludimila Monjardim Casagrande   12

POO - 12 - A Classe Object

  • 1.
    Fundamentos da LinguagemJava A Classe Object Classes Básicas da API do Java Ludimila Monjardim Casagrande 2012
  • 2.
    A Classe Object  Object é a classe raiz da hierarquia de classes do Java.  Toda classe em Java, mesmo as que não pertencem à API, estendem Object, ainda que isso não tenha sido explicitamente declarado.  Sendo assim, toda instância de uma classe implementada em Java é um Object e herda os métodos declarados nesta superclasse. Fundamentos do Java ©2012 Ludimila Monjardim Casagrande 2
  • 3.
    Métodos Especiais deObject  Existem dois métodos de Object que merecem atenção especial por serem muito utilizados.  Esses métodos são:  public String toString()  public boolean equals(Object obj)  A intenção por trás dos métodos equals() e toString() é justamente que eles sejam sobrescritos de modo mais específico e adequado para cada uma das subclasses. Fundamentos do Java ©2012 Ludimila Monjardim Casagrande 3
  • 4.
    O Método toString()de Object  A implementação do método toString() na classe Object é: public String toString( ) { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } Fundamentos do Java ©2012 Ludimila Monjardim Casagrande 4
  • 5.
    Sobrescrevendo o MétodotoString() public class Usuario extends Object { private String nome; private String login; private String senha; public Usuario(){ } public Usuario(String nome, String login, String senha) { super(); this.nome = nome; this.login = login; this.senha = senha; Toda vez que o método } public String toString( ) é //getters e setters... implementado em uma @Override classe, está ocorrendo a public String toString() { sobreposição do mesmo return "Usuario [nome=" + nome + ", login=" + login + ", senha=" + senha + "]"; método declarado na } superclasse Object. } Fundamentos do Java ©2012 Ludimila Monjardim Casagrande 5
  • 6.
    Sobrescrevendo o MétodotoString() public class Aluno extends Usuario { private int ra; //registro acadêmico do aluno public Aluno(){ } public Aluno(String nome, String login, String senha, int ra){ super(nome, login, senha); this.ra = ra; } … @Override Neste caso o método public String toString() { public String toString( ) return "Aluno [nome=" + getNome() + está sobrepondo a ", login=" + getLogin() + implementação do ", senha=" + getSenha() + mesmo método na ", ra=" + ra + "]"; } superclasse Usuario. } Fundamentos do Java ©2012 Ludimila Monjardim Casagrande 6
  • 7.
    Chamada de MétodosSobrepostos public class Main { public static void main(String[] args) { /* A variável o do tipo Object recebe qualquer objeto, * pois todo objeto estende Object */ Object o = new Aluno(“Ana”, “ana”, “123”, 30200); System.out.println(o.toString()); } } Qual será o resultado? o 0x0123 O resultado será Aluno [nome=Ana, login=ana, nome Ana senha=123, ra=30200], isto é, o método chamado ana login foi o da subclasse. Embora a variável seja do tipo senha 123 Object, o objeto para o qual ela aponta é do tipo ra 30200 Aluno. Fundamentos do Java ©2012 Ludimila Monjardim Casagrande 7
  • 8.
    O Método equalsde Object  A implementação do método equals na classe Object é: public boolean equals(Object obj) { return (this == obj); }  O objetivo deste método é realizar a comparação do objeto como um todo e não a comparação somente entre as referências para os objetos, o que é proporcionado pelo operador ==. Fundamentos do Java ©2012 Ludimila Monjardim Casagrande 8
  • 9.
    Sobrescrevendo o Métodoequals public boolean equals(Object obj) { u1 0x0123 if (this == obj){ return true; nome Ana login ana } senha 123 if (obj instanceof Usuario) { Usuario u = (Usuario)obj; if (this.nome.equals(u.nome) && this.login.equals(u.login) && this.senha.equals(u.senha)) { return true; u2 0x0456 } } nome Ana return false; login ana } senha 123 Método equals da classe Usuario. Fundamentos do Java ©2012 Ludimila Monjardim Casagrande 9
  • 10.
    Sobrescrevendo o Métodoequals public boolean equals(Object obj) { a1 0x0123 if (this == obj){ nome Ana return true; login ana } senha 123 if (obj instanceof Aluno){ ra 30200 Aluno a = (Aluno)obj; if (this.ra == a.ra && this.getNome().equals(a.getNome())) { return true; } a2 0x0456 } return false; nome Ana } login ana Método equals da classe Aluno. senha 123 ra 30200 Fundamentos do Java ©2012 Ludimila Monjardim Casagrande 10
  • 11.
    Implementação do Métodoequals  Sugestão de passo a passo para implementar o método equals: 1. Verifique se a referência para o objeto corrente (this) é igual à referência do objeto passado como argumento usando o operador de igualdade. 2. Se as referências forem iguais retorne true. 3. Verifique se o objeto passado como argumento é instância da classe corrente usando o operador instanceof. Em caso negativo, retorne false. 4. Em caso positivo, compare os valores internos dos dois objetos usando o operador de igualdade para comparação de primitivos e o método equals para a comparação de objetos, incluindo Strings. 5. Se os valores forem iguais retorne true, caso contrário retorne false. Fundamentos do Java ©2012 Ludimila Monjardim Casagrande 11
  • 12.
    Referências  Capítulo 15 – Object. Orientação a Objetos em Java. K19 Treinamentos. http://www.k19.com.br/downloads/apostilas-java.  Caelum: Ensino e Soluções em Java. FJ-11 – Java e Orientação a Objetos. http://www.caelum.com.br/curso/fj-11-java- orientacao-objetos/ Fundamentos do Java ©2012 Ludimila Monjardim Casagrande 12