Downcasting bazen gerekli ve uygundur. Özellikle, bir yeteneğe sahip olabilen veya olmayabilen nesnelerin olduğu durumlarda ve bu yeteneğin bazı varsayılan biçimlerde bu yetenek olmadan nesneleri ele alırken kullanmak istediği durumlarda genellikle uygundur. Basit bir örnek olarak, a'nın String
başka bir keyfi nesneye eşit olup olmadığını sorduğunu varsayalım . Birinin String
diğerine eşit String
olması için, diğer dizenin uzunluk ve destek karakter dizisini incelemesi gerekir. Bir Eğer String
bir eşittir olmadığı sorulur Dog
ancak bu uzunluğunu erişemez Dog
, ama gerek olmamalıdır; bunun yerine, String
a'nın kendisini karşılaştırması beklenen nesne birString
karşılaştırmada varsayılan bir davranış kullanılmalıdır (diğer nesnenin eşit olmadığını bildirme).
Düşüşün en şüpheli olduğu zaman, dökülmekte olan nesnenin uygun tipte "bilindiği" zamandır. Bir nesne olduğu bilinmektedir, genel olarak, Cat
bir türde bir değişken kullanmalıdır Cat
yerine tipte bir değişken daha Animal
başvurmak için. Ancak bunun her zaman işe yaramadığı zamanlar vardır. Örneğin, bir Zoo
koleksiyon, her çiftteki nesnelerin, diğer çiftlerdeki nesnelere etki edemeseler bile, birbirlerinin üzerinde hareket edebileceği beklentisiyle çift / tek dizi yuvalarındaki nesne çiftlerini tutabilir. Böyle bir durumda, her çiftteki nesnelerin, sözdizimsel olarak , herhangi başka bir çiftten nesneleri geçirebilecekleri şekilde, spesifik olmayan bir parametre tipini kabul etmeleri gerekecektir . Böylece bile Cat
'ınplayWith(Animal other)
yöntem, yalnızca zaman çalışacak other
bir oldu Cat
, Zoo
buna bir unsurunu geçmek mümkün olması gerekir Animal[]
parametresinin türü olması gerekir, böylece Animal
yerine Cat
.
Küçültmenin meşru bir şekilde kaçınılmaz olduğu durumlarda, kişi bunu niteliksiz kullanmalıdır. Kilit soru, birinin ne zaman aşağı inmesini mantıklı bir şekilde önleyebileceğini belirlemek ve mantıklı bir şekilde mümkün olduğunda kaçınmaktır.