logo

Java-exemplaar van

  1. Java-exemplaar van
  2. Voorbeeld van instanceof-operator
  3. Het toepassen van de instanceof-operator met een variabele heeft een nulwaarde
  4. Downcasten met instanceof operator
  5. Downcasting zonder instantie van de operator

De Java instanceof-operator wordt gebruikt om te testen of het object een instantie is van het opgegeven type (klasse of subklasse of interface).

De instanceof in Java wordt ook wel type genoemd vergelijkingsoperator omdat het de instantie met het type vergelijkt. Het retourneert waar of onwaar. Als we de operator instanceof toepassen op een variabele met een nulwaarde, retourneert deze false.

Eenvoudig voorbeeld van Java-instanceof

Laten we het eenvoudige voorbeeld van de instance-operator bekijken, waarbij deze de huidige klasse test.

 class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } } 
Test het nu
 Output:true 

Een object van het subklassetype is ook een type bovenliggende klasse. Als Hond bijvoorbeeld Dier uitbreidt, kan het object Hond worden verwezen door de klasse Hond of Dier.

Nog een voorbeeld van de Java instanceof-operator

 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 het nu
 Output:true 

instanceof in Java met een variabele met een nulwaarde

Als we de instanceof-operator toepassen op een variabele met een nulwaarde, retourneert deze false. Laten we het onderstaande voorbeeld bekijken, waarbij we de instanceof-operator toepassen op de variabele die een nulwaarde heeft.

 class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } } 
Test het nu
 Output:false 

Downcasten met Java-instanceof-operator

Wanneer het subklassetype verwijst naar het object van de bovenliggende klasse, staat dit bekend als downcasting. Als we het rechtstreeks uitvoeren, geeft de compiler een compilatiefout. Als u dit uitvoert door middel van typecasting, wordt ClassCastException tijdens runtime gegenereerd. Maar als we instanceof operator gebruiken, is downcasting mogelijk.

 Dog d=new Animal();//Compilation error 

Als we downcasting uitvoeren door middel van typecasting, wordt ClassCastException tijdens runtime gegenereerd.

 Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime 

Mogelijkheid tot downcasten met instanceof

Laten we het voorbeeld bekijken, waarbij downcasting mogelijk is per instantie van de operator.

als anders Java
 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 het nu
 Output:ok downcasting performed 

Downcasten zonder het gebruik van Java instanceof

Downcasting kan ook worden uitgevoerd zonder het gebruik van de instanceof-operator, zoals weergegeven in het volgende voorbeeld:

 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 het nu
 Output:ok downcasting performed 

Laten we dit eens nader bekijken. Het feitelijke object waarnaar wordt verwezen door a, is een object van de Dog-klasse. Dus als we het afwijzen, is het prima. Maar wat zal er gebeuren als we schrijven:

 Animal a=new Animal(); Dog.method(a); //Now ClassCastException but not in case of instanceof operator 

Inzicht in het echte gebruik van instanceof in Java

Laten we het echte gebruik van instanceof trefwoord bekijken aan de hand van het onderstaande voorbeeld.

 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 het nu
 Output: b method