Resumo da Classe Object em Java PDF
Document Details
![ForemostRadon](https://quizgecko.com/images/avatars/avatar-1.webp)
Uploaded by ForemostRadon
Tags
Summary
Este documento apresenta um resumo da classe Object em Java. A classe Object é uma classe fundamental em Java, que serve de base para todas as outras classes, e os seus métodos são importantes para o desenvolvimento no java como toString(), clone() e equals().
Full Transcript
A classe Object Em Java existe uma classe muito importante, que serve de base a todas as outras – a classe Object Ou seja, se desenhássemos o diagrama de classes completo, com todas as nossas classes e as pré-definidas, iriamos ver no topo da hierarquia, precisamente,...
A classe Object Em Java existe uma classe muito importante, que serve de base a todas as outras – a classe Object Ou seja, se desenhássemos o diagrama de classes completo, com todas as nossas classes e as pré-definidas, iriamos ver no topo da hierarquia, precisamente, a classe Object. Por isso, todas as classes Java acabam por ser subclasses, diretas ou não, da classe Object. Quando definirmos uma classe sem a derivarmos explicitamente de uma outra, então o compilador assume que a mesma deriva diretamente da classe Object. Estando a classe Object no topo da hierarquia, os seus métodos vão estar também presentes em todas as outras classes, como é o caso dos 3 métodos que se seguem: toString(), para converter o objeto para string; equals(), para verificar se dois objetos são iguais; clone(), para criar um objeto igual. A Linguagem Java 26 Algoritmos e Estrutura de Dados Os métodos toString() e equals() Qualquer classe que definamos vai então conter, entre outros herdados da classe Object, os métodos toString() e equals(). Porém, o seu código é muito geral, devendo, por isso, ser redefinido. String toString() Deve devolver uma string que se espera ser uma representação textual do estado interno do objeto. Devemos sempre redefini-lo na nossa classe; Caso contrário, devolve o nome da classe e um código hexadecimal que representa o objeto sobre qual invocamos o método (por exemplo, uma coisa assim: “Carro@7c24b943”); É este método que vai possibilitar que os objetos possam ser convertidos automaticamente para strings. boolean equals(Object obj) Para se obter uma sobreposição perfeita do método herdado de Object, o parâmetro tem de ser declarado do tipo Object; Usado para comparar o conteúdo dos objetos. A Linguagem Java 27 Algoritmos e Estrutura de Dados O método clone() Outro dos métodos herdados da classe Object é o método clone(). Object clone() Este método deverá criar e devolver uma cópia do objeto; Dado que o método clone() é definido como protected na superclasse Object, o mesmo deverá ser sempre reescrito como public em qualquer das suas subclasses que pretendam tornar-se clonáveis; Para se conseguir uma sobreposição perfeita do método herdado de Object, o método teria que ser declarado como devolvendo um Object; Mas para tornarmos mais fácil a sua invocação, vamos sempre declará-lo como devolvendo um objeto da classe específica que estamos a definir; Caso contrário, teríamos que fazer o casting (downcasting) do objeto devolvido sempre que invocássemos o clone(); Se a classe contiver atributos de tipos referência, então a implementação do método deverá garantir a duplicação dos elementos referenciados, para que não sejam as próprias referências a serem copiadas (cópia em profundidade). A Linguagem Java 28 Algoritmos e Estrutura de Dados toString(), clone() e equals() – na classe Counter public class Counter { private int count;... public String toString() { return "[" + count + "]"; } Esta 1ª linha de código é sempre igual public boolean equals(Object obj){ if (obj==null || this.getClass()!=obj.getClass()) return false; else return count == ((Counter)obj).count; } public Counter clone(){ return new Counter(count); } } A Linguagem Java 29 Algoritmos e Estrutura de Dados toString(), clone() e equals() – invocação dos métodos public class Universe { public static void main(String[] args) { Counter c = new Counter(); Counter c1 = c; Counter c2 = c.clone(); Counter c3 = new Counter(10); c1.increment(10); System.out.println("c:"+c.toString()+" c1:"+c1+" c2:"+c2+" c3:"+c3); System.out.println("c==c1? " + (c == c1)); Sempre que necessário, há uma System.out.println("c==c2? " + (c == c2)); invocação implícita do método toString(), convertendo o objeto System.out.println("c==c3? " + (c == c3)); numa string System.out.println("c.equals(c1)? " + c.equals(c1)); System.out.println("c.equals(c2)? " + c.equals(c2)); System.out.println("c.equals(c3)? " + c.equals(c3)); } } A Linguagem Java 30 Algoritmos e Estrutura de Dados Strings Enquanto que o C++ usa a codificação ASCII, que permite representar caracteres com um único byte, o Java usa um esquema de codificação de 16 bits, conhecido por Unicode, que permite representar e lidar com um conjunto mais alargado de caracteres. Em java, as strings são objetos da classe String. A classe String do Java Representa uma sequência de zero ou mais carateres; Fornece um conjunto alargado de operações para processamento de texto; Os carateres individuais podem ser acedidos por indexação, como nos arrays, mas através do método charAt(i); Disponibiliza o método length( ), que devolve o tamanho da string; Permite facilmente a concatenação de strings através do operador + String uc = “AED ” + 2023+ “ com Java”; Este exemplo mostra também a capacidade que o Java tem em converter valores não strings (2023) em strings, quando envolvidos em concatenações. Os objetos das outras classes têm todos o método toString(), que os permite converter numa string. UC uc=new UC(“AED”); …; String uc2s=uc.toString(); A Linguagem Java 31 Algoritmos e Estrutura de Dados Strings: instâncias imutáveis Uma importante característica da classe String do Java é que as suas instâncias são imutáveis Uma vez criado e inicializado um objeto da classe String, o seu conteúdo não poderá mais ser alterado; Mas como String é um tipo referência (não fosse ela uma classe Java), sabemos que uma variável do tipo String apenas guarda uma referência para o objeto imutável, logo, podemos sempre colocá-la a referenciar outro objeto string (o objeto é que é constante, não a variável que a referencia). String uc = “Algoritmos e Estruturas de Dados”; uc = “AED”; É por serem imutáveis que podemos atribuir strings sem recorrer à sua clonagem (duplicação) String s1=“aed”; …; String s2=s1; //s1 e s2 ficam a referenciar o mesmo objeto (“aed”), mas não há problema porque é constante. Qualquer alteração que se pretenda efetuar sobre uma string, levará sempre à criação de uma nova string, uma vez que a original é imutável Por isso, a classe String não é muito adequada quando se prevejam muitas alterações: O Java fornece uma outra classe para representar strings, a classe StringBuilder, que permite concatenar strings (mutáveis) e outras operações de uma forma bem mais eficiente. A Linguagem Java 32 Algoritmos e Estrutura de Dados Comparação de strings Como as strings são tipos referência, os operadores relacionais (==, !=, …) comparam as referências guardadas nas varáveis, não os objetos. Por isso, se se pretender verificar se as strings são iguais, usa-se o método equals(), em vez do operador ‘==‘ s1.equals(s2) compara o texto contido nos 2 objetos referenciados s1==s2 verifica apenas se as duas variáveis referenciam o mesmo objeto Se o objetivo for comparar a ordem alfabética das duas strings, então devemos usar o método compareTo() s1.compareTo(s2) devolve como resultado um inteiro que será: < 0, se s1 preceder s2; = 0, se forem iguais; > 0, se s1 suceder a s2; A Linguagem Java 33 Algoritmos e Estrutura de Dados