logo

Instancja Java

  1. instancja Java
  2. Przykład operatora instancjiof
  3. Stosowanie operatora instancjiof ze zmienną, która ma wartość null
  4. Rzutowanie w dół za pomocą operatora instancjiof
  5. Rzutowanie w dół bez operatora instancji

The operator instancji Java służy do sprawdzenia, czy obiekt jest instancją określonego typu (klasa, podklasa lub interfejs).

losowa liczba Java

Instancja w Javie jest również znana jako typ operator porównania ponieważ porównuje instancję z typem. Zwraca wartość true lub false. Jeśli zastosujemy operator instancjiof do dowolnej zmiennej, która ma wartość null, zwróci wartość false.

Prosty przykład instancji Java

Zobaczmy prosty przykład operatora instancji, w którym testuje on bieżącą klasę.

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

Obiekt typu podklasy jest jednocześnie typem klasy nadrzędnej. Na przykład, jeśli Pies rozszerza Zwierzę, wówczas obiekt Pies może być odwoływany albo przez klasę Pies, albo Zwierzę.

Kolejny przykład operatora instancji 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 } } 
Przetestuj teraz
 Output:true 

instancjiof w Javie ze zmienną o wartości null

Jeśli zastosujemy operator instancjiof ze zmienną o wartości null, zwróci wartość false. Zobaczmy poniższy przykład, w którym stosujemy operator instancjiof ze zmiennymi o wartości null.

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

Rzutowanie w dół za pomocą operatora instancji Java

Kiedy typ podklasy odnosi się do obiektu klasy nadrzędnej, nazywa się to rzutowaniem w dół. Jeśli wykonamy to bezpośrednio, kompilator zwróci błąd kompilacji. Jeśli wykonasz to poprzez rzutowanie typu, w czasie wykonywania zostanie zgłoszony wyjątek ClassCastException. Ale jeśli użyjemy operatora instancjiof, możliwe jest rzutowanie w dół.

wielopostaciowość
 Dog d=new Animal();//Compilation error 

Jeśli wykonamy rzutowanie w dół poprzez rzutowanie typów, w czasie wykonywania zostanie zgłoszony wyjątek ClassCastException.

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

Możliwość downcastingu za pomocą instancjiof

Zobaczmy przykład, w którym możliwe jest rzutowanie w dół za pomocą operatora instancjiof.

skrót Excela z wielkimi literami
 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); } } 
Przetestuj teraz
 Output:ok downcasting performed 

Downcasting bez użycia instancji Java

Rzutowanie w dół można również wykonać bez użycia operatora instancjiof, jak pokazano w poniższym przykładzie:

 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); } } 
Przetestuj teraz
 Output:ok downcasting performed 

Przyjrzyjmy się temu bliżej, rzeczywisty obiekt, do którego odnosi się a, jest obiektem klasy Dog. Jeśli więc to spuścimy, będzie w porządku. Ale co się stanie, jeśli napiszemy:

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

Zrozumienie prawdziwego użycia instancji w Javie

Zobaczmy rzeczywiste użycie słowa kluczowego instancjiof na przykładzie podanym poniżej.

 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); } } 
Przetestuj teraz
 Output: b method