- instancja Java
- Przykład operatora instancjiof
- Stosowanie operatora instancjiof ze zmienną, która ma wartość null
- Rzutowanie w dół za pomocą operatora instancjiof
- 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