Casting Naik/Turun dan instanceof
Pahami casting ke tipe induk, casting turun yang aman dengan instanceof, serta kesalahan umum yang menyebabkan ClassCastException.
Casting Naik/Turun dan instanceof adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 3 pelajaran total.
Konversi ke jenis induk dibandingkan dengan jenis turunan
Konversi ke jenis induk menyimpan objek anak dalam referensi bertipe induk dan selalu aman. Konversi ke jenis turunan melakukan hal sebaliknya dan memerlukan kehati-hatian. Kami menggunakan pemeriksaan jenis untuk memeriksa jenis sebenarnya saat program berjalan.
Kode: contoh konversi ke jenis induk
Konversi ke jenis induk dilakukan secara implisit dan aman: Dog dapat diperlakukan sebagai Animal. Anda dapat memanggil metode yang dideklarasikan pada Animal; versi Dog dijalankan saat program berjalan.
public class Main {
static class Animal {
void speak() { System.out.println("Animal sound"); }
}
static class Dog extends Animal {
void speak() { System.out.println("Woof"); }
void fetch() { System.out.println("Fetch!"); }
}
public static void main(String[] args) {
// Upcasting: Dog stored in an Animal reference (safe, automatic)
Animal a = new Dog();
a.speak(); // calls Dog's speak() due to dynamic binding
// a.fetch(); // Not allowed: reference is Animal, which does not declare fetch
System.out.println("Upcasting hides Dog-only methods from the reference type.");
}
}
Mengapa melakukan konversi ke jenis turunan?
Anda melakukan konversi ke jenis turunan saat memerlukan metode yang hanya dimiliki anak, seperti fetch(). Hal ini sebaiknya jarang dilakukan dan diperiksa dengan baik. Jika memungkinkan, tulislah kode berdasarkan kelas induk atau antarmuka.
Kode: konversi ke jenis turunan yang aman
Gunakan pemeriksaan jenis sebelum melakukan konversi. Jika pemeriksaan gagal, lewati konversi dan pilih jalur lain; cara ini menghindari ClassCastException.
public class Main {
static class Animal { void speak() { System.out.println("Animal sound"); } }
static class Dog extends Animal { void speak() { System.out.println("Woof"); } void fetch() { System.out.println("Fetch!"); } }
static class Cat extends Animal { void speak() { System.out.println("Meow"); } }
public static void main(String[] args) {
Animal a1 = new Dog();
Animal a2 = new Cat();
// Safe downcast using instanceof
if (a1 instanceof Dog) {
Dog d = (Dog) a1;
d.fetch(); // OK
}
if (a2 instanceof Dog) {
Dog d2 = (Dog) a2; // will not run
d2.fetch();
} else {
System.out.println("a2 is not a Dog, skip casting.");
}
}
}
Kesalahan umum
Kesalahan umum: melakukan konversi tanpa pemeriksaan dapat menyebabkan ClassCastException. Kesalahan lainnya adalah terlalu sering menggunakan konversi ke jenis turunan, alih-alih merancang kode berdasarkan antarmuka. Letakkan konversi dekat dengan tempat Anda membutuhkannya dan utamakan polimorfisme.
Kode: konversi buruk dibandingkan konversi aman
Jangan pernah melakukan konversi secara membabi buta. Jika Anda tidak yakin dengan jenis saat program berjalan, lindungi konversi dengan pemeriksaan jenis dan pilih alternatif yang aman jika jenisnya tidak cocok.
public class Main {
static class Animal { void speak() { System.out.println("Animal"); } }
static class Dog extends Animal { void fetch() { System.out.println("Fetch!"); } }
static class Cat extends Animal { }
public static void main(String[] args) {
Animal a = new Cat();
// Bad: direct cast (would throw at runtime)
// Dog dBad = (Dog) a; // ClassCastException if uncommented
// Good: check first
if (a instanceof Dog) {
Dog d = (Dog) a;
d.fetch();
} else {
System.out.println("Not a Dog; skipping cast.");
}
}
}
Pemeriksaan konversi ke jenis turunan
Pemeriksaan singkat: Bagaimana Anda melakukan konversi referensi Animal ke Dog dengan aman?
Ringkasan
Ringkasan: Konversi ke jenis induk aman dan umum. Konversi ke jenis turunan memerlukan pemeriksaan jenis untuk menghindari program berhenti; utamakan rancangan berdasarkan jenis induk atau antarmuka untuk mengurangi konversi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Casting Naik/Turun dan instanceof” gratis?
Ya — teks lengkap “Casting Naik/Turun dan instanceof” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 3 pelajaran total.
Apa yang akan aku pelajari di “Casting Naik/Turun dan instanceof”?
Pahami casting ke tipe induk, casting turun yang aman dengan instanceof, serta kesalahan umum yang menyebabkan ClassCastException. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 3.
Berapa lama pelajaran “Casting Naik/Turun dan instanceof” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Kelas Abstrak
- Antarmuka (Pengantar dan Perbandingan)
- Casting Naik/Turun dan instanceof