- Java örneği
- Örnek operatörü örneği
- Instanceof operatörünü boş değere sahip bir değişkenle uygulamak
- Instanceof operatörüyle downcasting
- Örnek operatörü olmadan indirgeme
Java örneği operatörü nesnenin belirtilen türün (sınıf, alt sınıf veya arayüz) bir örneği olup olmadığını test etmek için kullanılır.
Java'daki Instanceof aynı zamanda type olarak da bilinir. karşılaştırma operatörü çünkü örneği türle karşılaştırır. Doğru ya da yanlış değerini döndürür. Instanceof operatörünü null değeri olan herhangi bir değişkene uygularsak false değerini döndürür.
Java örneğinin basit örneği
Geçerli sınıfı test ettiği basit örnek operatör örneğini görelim.
class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } }Şimdi Test Edin
Output:true
Alt sınıf türündeki bir nesne aynı zamanda bir üst sınıf türüdür. Örneğin, eğer Dog Animal'ı genişletirse Dog'un nesnesine Dog veya Animal sınıfı tarafından başvurulabilir.
Başka bir Java örneği operatörü örneği
class Animal{} class Dog1 extends Animal{//Dog inherits Animal public static void main(String args[]){ Dog1 d=new Dog1(); System.out.println(d instanceof Animal);//true } }Şimdi Test Edin
Output:true
null değere sahip bir değişkenle Java'da Instanceof
Instanceof operatörünü null değere sahip bir değişkenle uygularsak false değerini döndürür. Aşağıda null değere sahip değişkenle exampleof operatörünü uyguladığımız örneğe bakalım.
class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } }Şimdi Test Edin
Output:false
Java Instanceof operatörü ile downcasting
Alt sınıf türü, Parent sınıfının nesnesine atıfta bulunduğunda, buna aşağı yayın denir. Direkt olarak yaparsak derleyici Derleme hatası verir. Bunu typecasting ile gerçekleştirirseniz, çalışma zamanında ClassCastException oluşturulur. Ancak exampleof operatörünü kullanırsak downcasting mümkündür.
Dog d=new Animal();//Compilation error
Aşağıya indirmeyi typecasting ile gerçekleştirirsek, çalışma zamanında ClassCastException oluşturulur.
Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime
Instanceof ile downcasting imkanı
Instanceof operatörü tarafından aşağı yayının mümkün olduğu örneği görelim.
class Animal { } class Dog3 extends Animal { static void method(Animal a) { if(a instanceof Dog3){ Dog3 d=(Dog3)a;//downcasting System.out.println('ok downcasting performed'); } } public static void main (String [] args) { Animal a=new Dog3(); Dog3.method(a); } }Şimdi Test Edin
Output:ok downcasting performed
Java Instanceof kullanılmadan downcasting
Aşağıya indirme, aşağıdaki örnekte gösterildiği gibi exampleof operatörü kullanılmadan da gerçekleştirilebilir:
class Animal { } class Dog4 extends Animal { static void method(Animal a) { Dog4 d=(Dog4)a;//downcasting System.out.println('ok downcasting performed'); } public static void main (String [] args) { Animal a=new Dog4(); Dog4.method(a); } }Şimdi Test Edin
Output:ok downcasting performed
Şimdi buna daha yakından bakalım, a ile gösterilen asıl nesne Dog sınıfının bir nesnesidir. Yani eğer onu küçümsersek sorun olmaz. Ama şunu yazarsak ne olur:
Animal a=new Animal(); Dog.method(a); //Now ClassCastException but not in case of instanceof operator
Java'da exampleof'un gerçek kullanımını anlamak
Aşağıda verilen örnekle exampleof anahtar sözcüğünün gerçek kullanımını görelim.
interface Printable{} class A implements Printable{ public void a(){System.out.println('a method');} } class B implements Printable{ public void b(){System.out.println('b method');} } class Call{ void invoke(Printable p){//upcasting if(p instanceof A){ A a=(A)p;//Downcasting a.a(); } if(p instanceof B){ B b=(B)p;//Downcasting b.b(); } } }//end of Call class class Test4{ public static void main(String args[]){ Printable p=new B(); Call c=new Call(); c.invoke(p); } }Şimdi Test Edin
Output: b method