Memahami Casting Pada Objek Dan Penggunaan Operator instanceof

Hallo Gan, kali ini kita akan mendiskusikan mengenai casting pada objek dan penggunaan instanceof. Bagi yang sedang belajar pemrograman Java mungkin sering dipusingkan dengan istilah ini, namun sebenarnya tidak serumit itu.

Baca juga:

Numerik casting
Casting char dengan tipe numerik

Apa Itu Casting Objek Pada Java?

Casting objek artinya adalah satu tipe referensi objek dapat menjadi tipe casting pada referensi objek lainnya.

Casting objek ini terdiri dari:

  • Upcasting
  • Downcasting
casting objek dan operator instanceof

 

Upcasting objek

Upcasting objek adalah casting dari subtype ke supertype atau dari suatu objek subclass ke superclass. Atau bisa dikatakan menuju ke arah atas dari rantai inheritance.

Untuk memahami dengan mudah, perhatikan contoh berikut ini:

Apa yang terjadi pada kode dia atas adalah anda melakukan casting tipe Samsung ke tipe Handphone, naik ke atas rantai inheritance. Ini di kenal dengan upcasting.

Kalau begitu mengapa method dari class Samsung yang dipanggil?

Jawabannya adalah casting objek tidak mengubah objek aktual dari suatu class. Oleh karena itu, “samsung” tetaplah objek dari class Samsung, hanya variabel referensinya saja yang berubah.

Dikarenakan upcasting itu selalu mengarah dari class yang lebih spesifik menuju ke class yang lebih umum, maka selalu aman dilakukan.

Jadi hal yang perlu anda lakukan untuk upcasting ini adalah menetapkan objek pada variabel referensi dari superclass.

 

Mengapa upcasting dilakukan?

Upcasting dilakukan bila ingin menulis kode yang berhubungan dengan supertype, seperti contoh di bawah ini:

Output:

Method pakaiHp() dari class user dapat menerima objek apapun yang merupakan subtype dari Handphone. Karena samsung merupakan subtype dari Handphone, maka objek tersebut di upcasting ke type Handphone dan bisa dipassed-kan ke dalam parameter dari method pakaiHp().

Downcasting

Kebalikan dari upcasting, downcasting merupakan casting ke subtype, ke arah bawah dari rantai inheritance.

Perhatikan kode di bawah ini:

Di sini anda melakukan casting dari tipe Handphone ke tipe Samsung. Namun, downcasting bisa salah jika objek aktual bukanlah merupakan objek target.

Misal dari kode di atas:

Maka akan muncul ClassCastException, misalkan seperti berikut ini:

Kenapa harus melakukan downcasting?

Downcasting lebih sering di lakukan di bandingkan dengan upcasting. Downcasting bertujuan untuk mengakses perilaku dari suatu objek yang spesifik.

Untuk memastikan downcasting di lakukan pada objek aktual yang tepat, maka bisa di uji dengan operator instanceof.

Menggunakan Operator instanceof

Operator ini berfungsi untuk menguji apakah suatu objek merupakan instance tipe spesifik dari class, subclass atau interface. Dikenal juga sebagai operator perbandingan karena bekerja dengan cara membandingkan instance dengan tipe dan akan mengembalikan nilai true atau false.

Jika anda mengaplikasikan instanceof pada variabel dengan nilai null, maka akan mengembalikan nilai false.

Untuk lebih jelasnya perhatikan kode di bawah ini:

Contoh 1

Output:

Contoh 2

Bila motor IS A  kendaraan (ingat konsep IS A pada inheritance), maka tipe objek Motor juga merupakan instance dari Kendaraan. Dengan kata lain, tipe objek dari subclass juga merupakan tipe dari superclass. Di bawah ini objek motor dapat direferensikan oleh class Motor ataupun class Kendaraan.

Output:

Contoh 3

Berikut ini adalah contoh bila menggunakan instanceof pada variabel yang memiliki nilai null, maka akan mengembalikan nilai false.

Output:

Contoh 4



Output:

Casting hanya dapat di lakukan jika suatu objek merupakan instance dari class target. Jadi operator instanceof akan memastikan apakah suatu objek merupakan instance dari class yang ditargetkan sebelum casting dilakukan.

Eksplisit casting pada PersegiPanjang dan Lingkaran perlu dilakukan karena method-method seperti getPanjang(), getLebar(), hitungLuasPersegi(), getRadius(), dan hitungLuasLingkaran() tidak dimiliki oleh class Object.

Be the first to comment

Leave a Reply

Your email address will not be published.


*