Yukarı dönüştürme ile, aslında nesnenin tür bilgisi kaybedilir. Bazı durumlarda
bir nesneyi gerçek türüne dçnüştürmek isteyebilirsiniz, buna aşağı dönüştürme
denir. Bir nesneyi daha özgü bir sınıfa dönüştürdüğünüzden aşağı dönüştürme
açıkça yapılmalıdır:
Sekil s = new Daire();
Daire c = (Daire) s;
Aşağı dönüştürme yaparken dönüşümün doğruluğunu garanti etmelisiniz, böylece
bir nesneyi ilgisiz sınıfa dönüştürmezsiniz. Örneğin yukarıdaki örnekte
s nesnesini
Üçgen sınıfına
dönüştürmezsiniz. Aslında, Java'da her aşağı dönüştürmeye çalıştırma zamanında
tür kontrolü yapılır. Eğer bir nesneyi yanlış bir sınıfa dönüştürmeye
çalışırsanız çalıştırma istisnası olur. Bu amaçla çalıştırma tür saptaması
(RTTI) özelliği kullanılır. RTTI üzerine daha çok bilgi edinmek için Java
dokumantasyonuna başvurabilirsiniz.
Eğer bir nesnenin bir türe aşağı dönüştürülebildiğini kontrol etmek
zorundaysanız
instanceof operatörü kullanılabilir.
Örneğin önceki örnekte, eğer
sekiller dizisindeki
sadece
daireleri belirlemek istiyorsanız şunu
kullanabilirsiniz:
for(int i=0; i<sekiller.length; i++)
if(sekiller[i] instanceof Daire){
Daire c = (Daire) sekiller[i];
... // burada c ile çalışılır
}