logo

Java екземпляр на

  1. java instanceof
  2. Пример за оператор instanceof
  3. Прилагането на оператора instanceof с променлива има нулева стойност
  4. Преобразуване надолу с оператор instanceof
  5. Преобразуване надолу без оператор instanceof

The java instanceof оператор се използва за проверка дали обектът е екземпляр от посочения тип (клас или подклас или интерфейс).

Екземплярът на java е известен също като тип оператор за сравнение защото сравнява инстанцията с типа. Връща или true, или false. Ако приложим оператора instanceof с която и да е променлива, която има нулева стойност, тя връща false.

Прост пример за java instanceof

Нека видим простия пример за оператор на екземпляр, където тества текущия клас.

 class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } } 
Тествайте сега
 Output:true 

Обект от тип подклас също е тип родителски клас. Например, ако Dog разширява Animal, тогава обектът на Dog може да бъде препратен от клас Dog или Animal.

Друг пример за оператор на java instanceof

 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 } } 
Тествайте сега
 Output:true 

instanceof в java с променлива, която има нулева стойност

Ако приложим оператор instanceof с променлива с нулева стойност, той връща false. Нека видим примера, даден по-долу, където прилагаме оператор instanceof с променлива, която има нулева стойност.

 class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } } 
Тествайте сега
 Output:false 

Понижаване с оператор на java instanceof

Когато типът подклас се отнася до обекта на родителския клас, това е известно като низходящо предаване. Ако го изпълним директно, компилаторът дава грешка при компилиране. Ако го изпълните чрез преобразуване на типове, ClassCastException се хвърля по време на изпълнение. Но ако използваме оператор instanceof, понижаването е възможно.

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

Ако извършим downcasting чрез typecasting, ClassCastException се хвърля по време на изпълнение.

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

Възможност за понижаване с instanceof

Нека да видим примера, където понижаването е възможно чрез оператор instanceof.

 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); } } 
Тествайте сега
 Output:ok downcasting performed 

Прехвърляне без използване на java instanceof

Преобразуването надолу може да се извърши и без използването на оператор instanceof, както е показано в следния пример:

 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); } } 
Тествайте сега
 Output:ok downcasting performed 

Нека да разгледаме по-отблизо този действителен обект, който е препратен от a, е обект от клас Dog. Така че, ако го намалим, всичко е наред. Но какво ще стане, ако напишем:

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

Разбиране на реалното използване на instanceof в java

Нека видим реалното използване на ключовата дума instanceof чрез примера, даден по-долу.

 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); } } 
Тествайте сега
 Output: b method