Downcasting, upcasting tam zıt hareketi fakat upcasting gibi risksiz değil.Downcasting, upcasting tam zıt hareketi fakat upcasting gibi risksiz değil .
Daha özellikli bir tipden daha genel bir tipe dönüşüm her zaman güvenlidir.
Sonuçta genel tipdeki tüm arayüzler (metodlar), daha özellikli olan tipde mevcut olacaktır.
Downcasting'de ise daha genel bir tipden daha özellikle bir tipe geçiş söz konusudur. Bu geçiş olaylarını daha güvenli kılmak için instanceof anahtar kelimesi kullanılır.
Örnek :
// upcasting ve downcasting
class Xmodel
{
public **** sesAc() {
System.out.println("X model televizyon sesAc()");
}
public **** sesKapa() {
System.out.println("X model televizyon sesKapa()");
}
public **** kanalDegistir() {
System.out.println("X model televizyon kanalDegistir()");
}
}
class Ymodel extends Xmodel
{
public **** sesAc() {
System.out.println("Y model televizyon sesAc()");
}
public **** sesKapa() {
System.out.println("Y model televizyon sesKapa()");
}
public **** kanalDegistir() {
System.out.println("Y model televizyon kanalDegistir() , ZapLama Yapabiliyoruz Ley Ley");
}
public **** teleText() {
System.out.println("Y model televizyon teleText()");
}
}
public class Televizyon2
{
public static **** main(String args[]) {
Xmodel x_model_Kumanda = new Ymodel(); // Dogru , upcasting yapiyoruz
Ymodel y_model_Kumanda = null ;
if ( x_model_Kumanda instanceof Ymodel )
{
y_model_Kumanda = (Ymodel) x_model_Kumanda;
y_model_Kumanda.teleText();
}
// x_model_Kumanda.teleText() ; !! hata !! , bu kumandanin boyle bir dugmesi yok
}
}
Aşagıdaki satırlara dikkat edelim :
if ( x_model_Kumanda instanceof Ymodel ) {
y_model_Kumanda = (Ymodel) x_model_Kumanda;
y_model_Kumanda.teleText();
}
RTTI (run-time da tip kontrolü ) yaptık ve eğer x_model_Kumanda referansına Ymodel bir obje bağlıysa, if koşulu sağlanıyor ve gerekli işlemler yapılıyor. RTTI daha birçok faydası vardır, mesela run-time da hangi tip le uğraştığınızı kontol edebilirsiniz ve bu kontrol sonucunda gerekenleri yapabilirsiniz.
Bu örnekte belki instanceof'un önemini fazla vurgulayamadık ama downcasting yaparken programınızın run-time da patlama riskini sıfıra indirmek istiyorsanız bu kontrolü kullanmanız gerekir.
Daha özellikli bir tipden daha genel bir tipe dönüşüm her zaman güvenlidir.
Sonuçta genel tipdeki tüm arayüzler (metodlar), daha özellikli olan tipde mevcut olacaktır.
Downcasting'de ise daha genel bir tipden daha özellikle bir tipe geçiş söz konusudur. Bu geçiş olaylarını daha güvenli kılmak için instanceof anahtar kelimesi kullanılır.
Örnek :
// upcasting ve downcasting
class Xmodel
{
public **** sesAc() {
System.out.println("X model televizyon sesAc()");
}
public **** sesKapa() {
System.out.println("X model televizyon sesKapa()");
}
public **** kanalDegistir() {
System.out.println("X model televizyon kanalDegistir()");
}
}
class Ymodel extends Xmodel
{
public **** sesAc() {
System.out.println("Y model televizyon sesAc()");
}
public **** sesKapa() {
System.out.println("Y model televizyon sesKapa()");
}
public **** kanalDegistir() {
System.out.println("Y model televizyon kanalDegistir() , ZapLama Yapabiliyoruz Ley Ley");
}
public **** teleText() {
System.out.println("Y model televizyon teleText()");
}
}
public class Televizyon2
{
public static **** main(String args[]) {
Xmodel x_model_Kumanda = new Ymodel(); // Dogru , upcasting yapiyoruz
Ymodel y_model_Kumanda = null ;
if ( x_model_Kumanda instanceof Ymodel )
{
y_model_Kumanda = (Ymodel) x_model_Kumanda;
y_model_Kumanda.teleText();
}
// x_model_Kumanda.teleText() ; !! hata !! , bu kumandanin boyle bir dugmesi yok
}
}
Aşagıdaki satırlara dikkat edelim :
if ( x_model_Kumanda instanceof Ymodel ) {
y_model_Kumanda = (Ymodel) x_model_Kumanda;
y_model_Kumanda.teleText();
}
RTTI (run-time da tip kontrolü ) yaptık ve eğer x_model_Kumanda referansına Ymodel bir obje bağlıysa, if koşulu sağlanıyor ve gerekli işlemler yapılıyor. RTTI daha birçok faydası vardır, mesela run-time da hangi tip le uğraştığınızı kontol edebilirsiniz ve bu kontrol sonucunda gerekenleri yapabilirsiniz.
Bu örnekte belki instanceof'un önemini fazla vurgulayamadık ama downcasting yaparken programınızın run-time da patlama riskini sıfıra indirmek istiyorsanız bu kontrolü kullanmanız gerekir.