Dalam bahasa pemrograman Java kita mengenal class dan object. Suatu variabel pada Java selalu dideklarasikan melalui suatu tipe class tertentu. Sedangkan bagaimana variabel tersebut tersimpan dalam memory ditentukan oleh tipe object variabel itu sendiri. Untuk lebih jelasnya mari kita lihat contoh coding berikut ini.
// deklarasi class
class Y {}
class X extends Y {}
// membuat object bertipe X dengan variabel bertipe Class Y
Y z = new X();
Pada contoh coding diatas, object bertipe X disimpan dalam variabel z dengan tipe class Y. Kasus ini sangat lazim terjadi dalam pemrograman Java dan memang membutuhkan pengetahuan yang mendalam tentang konsep OOP pada Java. Nextgen menyediakan kursus Java yang dapat membantu pesertanya memahami konsep OOP secara mendalam. Kursus programming Nextgen fokus kepada pengerjaan tugas coding sehingga membantu pesertanya memahami konsep OOP secara utuh dan mendalam.
Artikel ini adalah kelanjutan dari artikel pertama Cara Mudah Memahami Java Casting. Disarankan Anda membaca dulu artikel pertama agar lebih memahami artikel ini.
Karena suatu object dapat dideklarasikan melalui banyak tipe class maka disini terjadi kebutuhan untuk melakukan casting. Casting pada object adalah mengubah tipe deklarasi class pada suatu object. Sama seperti casting pada tipe data primitive yang sudah kita jelaskan pada artikel sebelumnya, casting pada object juga terdiri dari dua jenis, pertama Automatic Casting dan kedua adalah Manual Casting.
Automatic Casting
Automatic casting pada object terjadi apabila tipe class pada variabel lama sudah pasti juga merupakan tipe class pada variabel baru. Mari kita lihat contoh coding berikut ini.
class Binatang {}
class Kuda extends Binatang {}
Kuda kuda = new Kuda();
// Automatic casting dari variabel bertipe Class Kuda
// kepada variabel bertipe Class Binatang
Binatang binatang = kuda;
Pada contoh kasus diatas kita tahu pasti bahwa Kuda sudah pasti juga merupakan Binatang, karena class Kuda adalah sub class Binatang. Karena itulah pada contoh diatas kita hanya perlu melakukan automatic casting. Sekarang mari kita lihat satu contoh kasus menarik lain.
class Binatang {}
class Kuda extends Binatang {}
Binatang binatang = new Binatang();
Kuda kuda = new Kuda();
// Automatic casting kepada variabel bertipe Object
Object o1 = binatang;
Object o2 = kuda;
Semua class dalam Java mempunyai super class bertipe java.lang.Object, oleh karena itu semua variabel bertipe class apapun bisa dilakukan automatic casting menjadi variabel bertipe class java.lang.Object. Seperti contoh diatas variabel o1 dan o2 adalah bertipe class java.lang.Object. Sederhananya semua variabel pada Java dengan tipe class apapun adalah juga merupakan java.lang.Object.
Sekarang apa manfaatnya automatic casting ini ?. Berikut contohnya.
// deklarasi fungsi
public void beternak(Binatang binatang) {
// lakukan hal-hal yang berkaitan dengan cara beternak binatang
}
...
class Binatang {}
class Kuda extends Binatang {}
class Kerbau extends Binatang {}
Kuda kuda = new Kuda();
Kerbau kerbau = new Kerbau();
beternak(kuda); // automatic casting
beternak(kerbau); // automatic casting
Pada contoh diatas kita mempunyai satu fungsi generik untuk beternak binatang secara umum. Fungsi ini menerima parameter berupa variabel bertipe class Binatang, karena fungsi ini hanya melakukan proses beternak binatang secara umum. Oleh karena itu variabel bertipe class Kuda dan class Kerbau pun bisa dimasukkan kedalam parameter fungsi tersebut. Automatic casting dilakukan secara otomatis pada waktu fungsi tersebut dipanggil.
Manual Casting
Manual casting pada object terjadi apabila tipe class pada variabel lama belum tentu juga merupakan tipe class pada variabel baru. Mari kita lihat contoh coding berikut ini.
class Binatang {}
class Kuda extends Binatang {}
class Kerbau extends Binatang{}
Binatang binatang = new Binatang();
// Manual casting
Kuda kuda = (Kuda) binatang;
Pada contoh diatas kita tidak tahu pasti apakah Binatang itu juga merupakan Kuda, karena bisa saja Binatang itu adalah Kerbau. Pada contoh diatas kita harus menggunakan manual casting. Manual casting bisa berhasil bisa tidak, mari kita bahas satu persatu.
Manual Casting Berhasil
Manual casting dikatakan berhasil apabila tipe class pada variabel yang baru cocok dengan tipe object yang tersimpan dalam memory. Sebagai contoh.
class Binatang {}
class Kuda extends Binatang {}
class Kerbau extends Binatang{}
// Object bertipe Kuda
// dalam variabel bertipe Binatang
Binatang binatang = new Kuda();
// Manual casting berhasil
Kuda kuda = (Kuda) binatang;
Pada contoh diatas, manual casting kepada object Kuda adalah cocok dengan tipe object sumbernya. Sebab kita tahu bahwa variabel binatang sebenarnya adalah object bertipe Kuda walaupun disimpan dalam variabel bertipe Binatang.
Manual Casting Gagal
Manual casting yang gagal akan melemparkan java.lang.ClassCastException pada waktu Runtime (program dijalankan). Contohnya adalah.
class Binatang {}
class Kuda extends Binatang {}
class Kerbau extends Binatang{}
// Object bertipe Kuda
// dalam variabel bertipe Binatang
Binatang binatang = new Kuda();
// Manual casting gagal
Kerbau kerbau = (Kerbau) binatang;
Pada contoh diatas manual casting kepada variabel bertipe class Kerbau akan gagal karena kita tahu bahwa variabel binatang sebenarnya adalah object bertipe Kuda walaupun disimpan dalam variabel bertipe Binatang.
Manfaat Manual Casting
Manual casting banyak manfaatnya dan sering kita lakukan dalam pemrograman Java. Salah satunya adalah untuk membuka fungsi-fungsi yang ada dalam sub class tapi tidak terdapat dalam super class. Sebagai contoh berikut.
class Binatang {}
class Kuda extends Binatang {
void lari() {}
}
// fungsi lari tidak dapat diakses
Binatang binatang = new Kuda();
binatang.lari(); // error
// manual casting
Kuda kuda = (Kuda) binatang;
// fungsi lari dapat diakses
kuda.lari();
Dengan melakukan manual casting kepada sub class maka kita dapat mengakses fungsi-fungsi yang tidak ada pada super class. Kita akan mendapatkan kasus-kasus ini cukup sering dalam membuat aplikasi menggunakan bahasa pemrograman Java.
Sekian dulu artikel kali ini, untuk selanjutnya kita akan membahas casting menggunakan Java interface pada artikel lain.