Baca artikel Konversi Data String Ke Tipe-Tipe Numerik Di Java
Di Java, proses konversi tipe numerik dengan rentang nilai kecil ke tipe numerik dengan rentang nilai lebih besar disebut widening, sedangkan konversi sebaliknya, dari rentang nilai besar ke rentang nilai lebih kecil disebut narrowing. Widening dapat dilakukan secara otomatis oleh kompiler Java.
Di program Java, sebuah kelas dapat menjadi tipe variabel. Variabel yang dideklarasikan dengan tipe kelas disebut dengan variabel acuan yang mengacu ke obyek kelas tersebut. Anda tentu akan banyak menggunakan variabel acuan ini ketika membuat program grafis (GUI). Konversi juga berlaku untuk tipe kelas dengan mengubah tipe kelas satu ke tipe kelas lain.
Syarat konversi atau casting tipe kelas adalah harus berada di dalam hierarki turunan (inheritance hierarchy). Sebagai contoh di dalam hierarki turunan Object - BangunDatar - PersegiPanjang - Balok, kelas Object adalah superclass dari BangunDatar, kelas BangunDatar adalah superclass dari PersegiPanjang dan kelas PersegiPanjang adalah superclass dari Balok. Kelas Object mempunyai sifat paling umum sedangkan kelas Balok mempunyai sifat paling spesifik.
Baca artikel Memahami Metoda toString Dari Kelas Object Di Java
Polymorphism di Java membolehkan membuat obyek subclass untuk diberikan ke variabel acuan tipe superclass. Berikut ini adalah pernyataan membuat obyek kelas PersegiPanjang untuk diberikan ke variabel obj dengan tipe kelas Object:
Object obj = new PersegiPanjang();
Kelas PersegiPanjang adalah turunan kelas Object, sehingga acuan ke obyek kelas PersegiPanjang dapat diberikan ke variabel obj dengan tipe Object yang merupakan superclass. Sebaliknya, Anda tidak dibolehkan untuk memberikan acuan ke obyek kelas Object ke variabel pp yang merupakan tipe kelas PersegiPanjang sebagaimana pernyataan yang keliru atau salah berikut ini:
// Pernyataan yang keliru atau salah
PersegiPanjang pp = obj;
Saat dieksekusi, pernyataan tersebut menghasilkan error. Instance (obyek) dari subclass adalah juga instance superclass tetapi tidak sebaliknya. Sebagai contoh, setiap persegi panjang adalah Object, tetapi tidak setiap Object adalah persegi panjang, bisa saja lingkaran, segitiga, bujur sangkar atau yang lain. Agar kompiler Java mengetahui bahwa obj adalah obyek kelas PersegiPanjang, Anda perlu mengkonversi secara eksplisit sebagaimana pernyataan di bawah ini.
PersegiPanjang pp = (PersegiPanjang) obj;
Anda dibolehkan untuk mengkonversi obyek subclass ke variabel dengan tipe superclass (upcasting) kerena instance dari subclass adalah juga instance dari superclass. Ketika mengkonversi instance (obyek) superclass ke variabel dengan tipe subclass atau downcasting, Anda perlu untuk melakukan konversi secara eksplisit.