Belajar Mengenal Upcasting dan Downcasting Objek di Program Java
Pada artikel belajar java sebelumnya , saya pernah membahas tentang Type Casting dalam Coding Java, yang dimana kita bisa mengkonversikan tipe data numerik (ex : integer,long dll) , dari tipe data kecil ke tipe data besar ,yang disebut Widening Conversion (Implicit Casting),dan juga dari tipe data besar ke tipe data kecil ,yang disebut Narrow Conversion (Explicit Casting ).
Nah , bedanya pada artikel belajar java kali ini , kita akan mencoba mengenal casting pada objek , yang terdiri dari 2 jenis ,yaitu Upcasting dan Downcasting , dari hubungan parent-child class ,yang terkait dengan konsep Inheritance(Pewarisan) dan juga Polymorphism. Selengkapnya ,berikut mari kita simak lebih lanjut :
1. Pertama buka IntelliJ IDEA ,atau Software IDE lain yang kalian gunakan , di Komputer atau Laptop kalian.
2. Sebelumnya , kalian bisa tulis contoh code berikut :
Contoh Code:
Penjelasan :
Pada contoh code program di atas ,sebagai contoh kita membuat class Binatang ,yang termasuk (Super Class/Parent Class).
Selanjutnya ,kita membuat class Anjing ,yang termasuk (Sub Class/Class Turunan) dari class Binatang.
Di dalam class Binatang ,kita mendefinisikan statement , pada method .makan()
Di dalam class Anjing ,kita mendefinisikan statement , pada method .makan() ,yang berasal dari (extends) class Binatang, dan juga method .suaraAnjing().
Setelah itu kita akan fokus pada beberapa baris code , pada contoh program di atas.
Pertama kalian perhatikan contoh code berikut :
Penjelasan :
Setelah itu pada method main utama , di dalam class MainClass, kita mencoba menjalankan atau mengeksekusi program.
Pertama kita membuat objek dari class Binatang,dengan nama binatang1 , dan juga class Anjing ,dengan nama anjing1.
Selanjutnya ,kita panggil semua method dari masing-masing objek ,outputnya akan tampil seperti pada gambar di bawah:
Berikut penjelasan upcasting dan downcasting di Java :
Contoh Code:
Contoh Code |
Penjelasan :
Pada contoh code program di atas ,sebagai contoh kita membuat class Binatang ,yang termasuk (Super Class/Parent Class).
Selanjutnya ,kita membuat class Anjing ,yang termasuk (Sub Class/Class Turunan) dari class Binatang.
Di dalam class Binatang ,kita mendefinisikan statement , pada method .makan()
Di dalam class Anjing ,kita mendefinisikan statement , pada method .makan() ,yang berasal dari (extends) class Binatang, dan juga method .suaraAnjing().
Setelah itu kita akan fokus pada beberapa baris code , pada contoh program di atas.
Pertama kalian perhatikan contoh code berikut :
Contoh Code |
Penjelasan :
Setelah itu pada method main utama , di dalam class MainClass, kita mencoba menjalankan atau mengeksekusi program.
Pertama kita membuat objek dari class Binatang,dengan nama binatang1 , dan juga class Anjing ,dengan nama anjing1.
Selanjutnya ,kita panggil semua method dari masing-masing objek ,outputnya akan tampil seperti pada gambar di bawah:
Output Hasil |
Berikut penjelasan upcasting dan downcasting di Java :
Contoh hirarki pewarisan dari class Binatang(Super Class) , Kucing(Sub Class) ,dan Anjing (Sub Class) |
Apa itu Upcasting ?
Upcasting adalah salah satu cara untuk casting atau mengkonversi objek ,dari tipe Sub class atau Class Turunan , ke tipe Super Class atau Class Parent (ke arah atas pada hirarki pewarisan).
Sekarang kita fokus pada contoh code berikut :
Contoh Code |
Pada contoh code di atas ,kita menggunakan binatang2 , yang merupakan variable referensi ,yang menyimpan nilai dari objek anjing1.
Inilah yang disebut sebagai Upcasting , dimana kita melakukan casting(konversi) objek dari tipe Sub class , ke tipe Super Class.
Sehingga , kita bisa menggunakan variable referensi binatang2 , untuk memanggil method .makan() , yang akan menampilkan output hasil seperti pada gambar berikut :
Output :
Output :
Output Hasil |
Pada komentar yang berisi : // akan error jika menggunakan binatang2.suaraAnjing();
Maksudnya adalah ketika mencoba memanggil method .suaraAnjing() , dengan variable referensi binatang2 ,akan menyebabkan error pada compiler.
Ini dikarenakan method .suaraAnjing() , tidak terkait dengan konsep inheritance(Pewarisan) , yang berarti di dalam class Binatang ,hanya tersedia method .makan() saja.
Catatan :
Sebenarnya var binatang2 , dapat memanggil method .suaraAnjing() . Asalkan codenya menjadi seperti ini : ((Anjing)binatang2).suaraAnjing();
Pada contoh code di atas , kita juga bisa menggantinya dengan contoh code di bawah :
Contoh Code |
Ouput hasilnya akan tetap sama seperti pada gambar di atas.
Sebenarnya ,code pada baris code pertama :
Binatang binatang2 = (Binatang) new Anjing();
Namun , karena proses upcasting , dilakukan secara otomatis ,pada bahasa pemrograman Java. Jadi kita tidak perlu eksplisit , menambahkan (Binatang) , karena akan terdeteksi redundant (pengulangan code ) pada compiler.
Upcasting : Konversi ke Tipe Super Class / ke atas hirarki pewarisan
Apa itu Downcasting ?
Sebaliknya downcasting adalah salah satu cara untuk casting atau mengkonversi objek ,dari tipe Super Class atau Class Parent, ke tipe Sub class atau Class Turunan (ke arah bawah pada hirarki pewarisan).
Sekarang kita fokus pada contoh code berikut :
Contoh Code |
Berbeda dengan upcasting ,yang dilakukan secara otomatis. Pada contoh code di atas , kita melakukan downcasting secara manual , dan kita perlu secara eksplisit , menambahkan (Anjing) , pada baris code ,saat kita menggunakan variable referensi anjing2.
Selanjutnya , kita panggil method .makan() dan suaraAnjing().
Setelah itu kita tampilkan output hasilnya , akan seperti pada gambar di bawah:
Output :
Output Hasil |
Point :
Downcasting : Konversi ke Tipe Sub Class / ke bawah hirarki pewarisan
Ingat :
Berbeda dengan tipe data primitif khususnya numerik ,yang akan berubah setelah dikonversi. Perlu di catat bahwa ,nilai dari tipe objek sebenarnya ,tidak akan berubah ,saat kita casting objek. Jadi hanya tipe referensinya saja yang berubah.
Referensi ibarat sebuah remote control ,yang mengendalikan dari jarak jauh. Remote control mempunyai lebih sedikit,atau lebih banyak tombol tergantung tipenya sendiri, dan juga objek yang disimpan di memory heap. Ketika kita melakukan casting , kita hanya mengubah tipe remote control , bukan mengubah objek itu sendiri.
Kenapa terjadi Error ClassCastException ?
Sekarang kita lanjut fokus , pada contoh code pertama berikut :
Contoh Code |
Maka contoh code di atas akan menampilkan output ,seperti pada gambar di bawah:
Output :
Output Hasil |
Penjelasan :
Pada contoh code pertama di atas , akan menyebabkan Error ClassCastException , ketika kita mencoba melakukan casting instansi tipe objek , yang tidak kompatibel. Ini termasuk salah satu Runtime Error ,yang dimana terjadi saat program di jalankan.
Jadi maksudnya disini , untuk casting objek hanya bekerja , ketika memenuhi syarat Relasi IS-A. Jika tidak ,maka Error ClassCastException akan terjadi.
Sekarang kita balik , menjadi seperti contoh code kedua berikut :
Contoh Code |
Pada contoh code kedua di atas. Ketika dijalankan , akan menampilkan output : Anjing makan tulang.., seperti output pada proses upcasting ,yang sudah saya jelaskan sebelumnya.
Jadi casting dapat dilakukan ,ketika Anjing adalah IS-A dari Binatang. Bukan Binatang IS-A dari Anjing. Seperti pada contoh code pertama ,yang akan menampilkan (throw) pesan error ketika program dijalankan.
Contoh sederhana di dunia nyatanya begini. Kalian punya jeruk , nah jeruk itu sudah pasti buah, sebaliknya buah itu tidak selalu jeruk. Bisa apel , rambutan , pisang dan lain sebagainya.
Atau kalian bisa baca selengkapnya tentang : Belajar Mengenal Relasi IS-A dan HAS-A di Program Java
Point :
Casting objek di java :Baca sebelumnya : Belajar Mengenal Contoh Class dan Object di Program Java
- Memenuhi syarat IS-A
- Terkait konsep inheritance (pewarisan)
- Upcasting otomatis
- Downcasting manual
- Upcasting ke atas
- Downcasting ke bawah