logo

Јава инстанцеоф

  1. јава инстанцеоф
  2. Пример оператора инстанцеоф
  3. Примена оператора инстанцеоф са променљивом има нулту вредност
  4. Смањење са инстанцеоф оператором
  5. Довнцастинг без инстанцеоф оператора

Тхе јава инстанцеоф оператор користи се за тестирање да ли је објекат инстанца наведеног типа (класа или подкласа или интерфејс).

Инстанцеоф у Јави је такође позната као тип оператор поређења јер пореди инстанцу са типом. Враћа или тачно или нетачно. Ако применимо инстанцеоф оператор са било којом променљивом која има вредност нулл, он враћа нетачно.

мамта кулкарни глумац

Једноставан пример јава инстанцеоф

Хајде да видимо једноставан пример оператора инстанце где тестира тренутну класу.

 class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } } 
Тестирајте одмах
 Output:true 

Објекат типа поткласе је такође тип родитељске класе. На пример, ако Дог проширује Анимал, онда објекат Дог може бити упућен или од стране Дог или Анимал класе.

Још један пример јава инстанцеоф оператора

 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 

инстанцеоф у Јави са променљивом која има вредност нулл

Ако применимо инстанцеоф оператор са променљивом која има вредност нулл, он враћа нетачно. Погледајмо пример дат у наставку где примењујемо инстанцеоф оператор са променљивом која има нулту вредност.

 class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } } 
Тестирајте одмах
 Output:false 

Смањење са јава инстанцеоф оператором

Када се тип подкласе односи на објекат родитељске класе, то је познато као довнцастинг. Ако га изведемо директно, компајлер даје грешку компилације. Ако га изводите превођењем типа, ЦлассЦастЕкцептион се избацује током извршавања. Али ако користимо инстанцеоф оператор, могуће је смањивање.

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

Ако извршимо довнцастинг помоћу типова, ЦлассЦастЕкцептион се избацује током извршавања.

покушајте цатцх блоцк у Јави
 Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime 

Могућност спуштања са инстанцеоф

Хајде да погледамо пример где је спуштање могуће помоћу инстанцеоф оператора.

 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 

Смањење без употребе јава инстанцеоф

Довнцастинг се такође може извршити без употребе инстанцеоф оператора као што је приказано у следећем примеру:

 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 

Хајде да ближе погледамо овај, стварни објекат на који упућује а, је објекат класе Дог. Дакле, ако га смањимо, у реду је. Али шта ће се десити ако напишемо:

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

Разумевање стварне употребе инстанцеоф у Јави

Хајде да видимо стварну употребу кључне речи инстанцеоф на примеру датом у наставку.

 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