logo

Екземпляр Java

  1. екземпляр Java
  2. Приклад оператора instanceof
  3. Застосування оператора instanceof зі змінною має нульове значення
  4. Зниження за допомогою оператора instanceof
  5. Зниження без оператора instanceof

The Оператор екземпляра java використовується для перевірки того, чи є об’єкт екземпляром зазначеного типу (класу, підкласу чи інтерфейсу).

Екземпляр instanceof у java також відомий як type оператор порівняння оскільки він порівнює екземпляр із типом. Він повертає або 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

 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 

Якщо ми виконуємо низхідне приведення типу, 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