- java forekomst af
- Eksempel på instans af operatør
- Anvendelse af instansen af operatoren med en variabel har null-værdi
- Downcasting med instans af operatør
- Nedkastning uden forekomst af operatør
Det java instans af operatør bruges til at teste, om objektet er en instans af den angivne type (klasse eller underklasse eller interface).
Forekomsten af i java er også kendt som type sammenligningsoperatør fordi den sammenligner instansen med type. Det returnerer enten sandt eller falsk. Hvis vi anvender instanceof-operatoren med en variabel, der har en nulværdi, returnerer den falsk.
Simpelt eksempel på java instanceof
Lad os se det simple eksempel på instansoperator, hvor den tester den aktuelle klasse.
class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } }Test det nu
Output:true
Et objekt af underklassetype er også en type overordnet klasse. For eksempel, hvis Dog udvider Animal, kan hundens objekt henvises til enten Hund- eller Animal-klassen.
Et andet eksempel på java-instans af operatør
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 } }Test det nu
Output:true
instanceof i java med en variabel, der har null-værdi
Hvis vi anvender instanceof-operator med en variabel, der har en nulværdi, returnerer den falsk. Lad os se eksemplet nedenfor, hvor vi anvender instanceof-operator med variablen, der har en nulværdi.
class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } }Test det nu
Output:false
Downcasting med java-instans af operatør
Når underklassetype refererer til objektet i forældreklassen, er det kendt som downcasting. Hvis vi udfører det direkte, giver compiler kompileringsfejl. Hvis du udfører det ved typecasting, kastes ClassCastException under kørsel. Men hvis vi bruger instanceof operator, er downcasting muligt.
Dog d=new Animal();//Compilation error
Hvis vi udfører downcasting ved typecasting, kastes ClassCastException under kørsel.
Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime
Mulighed for downcasting med instanceof
Lad os se eksemplet, hvor downcasting er mulig ved instanceof operator.
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); } }Test det nu
Output:ok downcasting performed
Downcasting uden brug af java instanceof
Downcasting kan også udføres uden brug af instanceof operator som vist i følgende eksempel:
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); } }Test det nu
Output:ok downcasting performed
Lad os se nærmere på dette, faktiske objekt, der henvises til af a, er et objekt af hundeklassen. Så hvis vi nedlægger det, er det fint. Men hvad sker der, hvis vi skriver:
Animal a=new Animal(); Dog.method(a); //Now ClassCastException but not in case of instanceof operator
Forståelse af reel brug af instanceof i java
Lad os se den reelle brug af instanceof søgeord ved eksemplet nedenfor.
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); } }Test det nu
Output: b method