- Java-exemplaar van
- Voorbeeld van instanceof-operator
- Het toepassen van de instanceof-operator met een variabele heeft een nulwaarde
- Downcasten met instanceof operator
- 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