Downcasting terkadang perlu dan tepat. Secara khusus, itu sering tepat dalam kasus di mana seseorang memiliki objek yang mungkin atau mungkin tidak memiliki beberapa kemampuan, dan seseorang ingin menggunakan kemampuan itu ketika ada saat menangani objek tanpa kemampuan itu dalam beberapa mode standar. Sebagai contoh sederhana, anggap a String
ditanya apakah itu sama dengan beberapa objek arbitrer lainnya. Agar satu String
sama dengan yang lain String
, ia harus memeriksa panjang dan dukungan array karakter dari string lainnya. Jika String
ditanya apakah sama dengan Dog
, bagaimanapun, ia tidak dapat mengakses panjangnya Dog
, tetapi seharusnya tidak harus; sebagai gantinya, jika objek yang String
seharusnya dibandingkan itu sendiri bukan aString
, perbandingan harus menggunakan perilaku default (melaporkan bahwa objek lain tidak sama).
Waktu ketika downcasting harus dianggap sebagai yang paling meragukan adalah ketika objek yang dilemparkan "diketahui" memiliki tipe yang tepat. Secara umum, jika suatu objek dikenal sebagai Cat
, seseorang harus menggunakan variabel tipe Cat
, bukan variabel tipe Animal
, untuk merujuknya. Namun ada kalanya ini tidak selalu berhasil. Sebagai contoh, Zoo
koleksi mungkin menahan pasangan objek dalam slot array genap / ganjil, dengan harapan bahwa objek di setiap pasangan akan dapat saling bertindak, bahkan jika mereka tidak dapat bertindak terhadap objek di pasangan lain. Dalam kasus seperti itu, objek dalam setiap pasangan masih harus menerima tipe parameter non-spesifik sehingga mereka, secara sintaksis , dapat melewati objek dari pasangan lain. Jadi, bahkan jika Cat
ituplayWith(Animal other)
Metode hanya akan bekerja ketika other
suatu Cat
, Zoo
akan perlu untuk dapat melewatinya elemen dari Animal[]
, jadi tipe parameternya harus Animal
lebih daripada Cat
.
Dalam kasus di mana downcasting secara sah tidak dapat dihindari, seseorang harus menggunakannya tanpa keraguan. Pertanyaan kuncinya adalah menentukan kapan seseorang secara bijaksana dapat menghindari downcasting, dan menghindarinya jika memungkinkan.