9.5 Object: The Cosmic Superclass

Di Java, setiap kelas yang telah di deklarasikan tanpa sebuah explicit extends clause akan secara otomatis extends the class object. Class object mendefinisikan beberapa general method, yaitu:
·         toString, yang menghasilkan string yang menjelaskan objek.
·          equal, yang membandingkan objek dengan satu sama lain.
·          hashCode, yang menghasilkan kode numerik untuk menyimpan objek dalam satu set.

9.5.1 Overriding the toString Method
toString method disebut otomatis kapanpun anda menggabungkan sebuah string dengan sebuah objek. Misalkan:
“box=” + box;
On one side of the + concatenation operator is a string, but on the other side is an object reference.
Bilangan juga di konversi ke strings ketika di gabungkan dengan string lain. Misalkan:
int umur = 18;
String s = "Umur Hari adalah " + age;
Let’s try the toString method for the BankAccount class:
BankAccount momsSavings = new BankAccount(5000);
String s = momsSavings.toString();
// Sets s to something like "BankAccount@d24606bf"
Hashcode dapat diguaan untuk mengatakan suatu objects apart- different objects seperti memiliki hashcode yang berbeda.
Kita harus mengoverride method dan tetap mendukung versi sebelumnya di BankAccount class.
public class BankAccount{
. . .
public String toString(){
return "BankAccount[balance=" + balance + "]";
}
}
This works better:
BankAccount momsSavings = new BankAccount(5000);
String s = momsSavings.toString(); // Sets s to "BankAccount[balance=5000]"
Override toSting method untuk menghasilkan string yang menjelaskan object’s state.

9.5.2 The equals Method
The object class juga mendukung equals method, yang menyatakan bahwa dua objek memiliki content yang sama:
if (stamp1.equals(stamp2)) . . .
// Contents are the same
Hal ini berbeda dengan operator ==, yang menyatakan bahwa dua objek adalah identik:
if (stamp1 == stamp2) . . .
// Objects are the same

9.5.3 The instanceof Operator
Diperbolehkan menyimpan subclass reference dalam variable superclass:
ChoiceQuestion cq = new ChoiceQuestion();
Question q = cq; // OK
Object obj = cq; // OK
Misalkan ada variable bertipe objek dan dia memegang Question refence. Dala hal ini kita dapat menggunakan cast untuk mengkonvertnya:
Question q = (Question) obj;
Namun ini agak berbahaya jika salah, dan obj sebenarnya mengacu ke sebuah objek dari jenis yang tidak berhubungan, maka "class cast" exception is thrown.
Untuk menghindarinya, dapat menggunakan instanceof operator yang digunakan untuk mengetes bahwa sebuah objek milik jenis tertentu. Misal:
Obj instanceof Question;
Akan mengembalikan nilai true jika tipe obj adalah konversi ke Question.

Dengan menggunakan instanceof operator, cast yang aman dapat dibuat:
if (obj instanceof Question){
Question q = (Question) obj;
}
Instanceof itu bukan sebuah method, dia adalah operator biasa seperti halnya + atau <. Tetapi instanceof tidak mengoperasikan pada bilangan.


Sumber: Horstmann, Coy. Fifth Edition. Big Java Early Objects.